1. 13 Oct, 2016 10 commits
    • Tatsuo Ishii's avatar
      Fix typo. · b1ee762a
      Tatsuo Ishii authored
      Confirmed by Tom Lane.
      b1ee762a
    • Tom Lane's avatar
      Fix another bug in merging of inherited CHECK constraints. · 3cca13cb
      Tom Lane authored
      It's not good for an inherited child constraint to be marked connoinherit;
      that would result in the constraint not propagating to grandchild tables,
      if any are created later.  The code mostly prevented this from happening
      but there was one case that was missed.
      
      This is somewhat related to commit e55a946a, which also tightened checks
      on constraint merging.  Hence, back-patch to 9.2 like that one.  This isn't
      so much because there's a concrete feature-related reason to stop there,
      as to avoid having more distinct behaviors than we have to in this area.
      
      Amit Langote
      
      Discussion: <b28ee774-7009-313d-dd55-5bdd81242c41@lab.ntt.co.jp>
      3cca13cb
    • Tom Lane's avatar
      Remove dead code in pg_dump. · c08521eb
      Tom Lane authored
      I'm not sure if this provision for "pg_backup" behaving a bit differently
      from "pg_dump" ever did anything useful in a released version.  But it's
      definitely dead code now.
      
      Michael Paquier
      c08521eb
    • Tom Lane's avatar
      Try to find out the actual hugepage size when making a MAP_HUGETLB request. · cb775768
      Tom Lane authored
      Even if Linux's mmap() is okay with a partial-hugepage request, munmap()
      is not, as reported by Chris Richards.  Therefore it behooves us to try
      a bit harder to find out the actual hugepage size, instead of assuming
      that we can skate by with a guess.
      
      For the moment, just look into /proc/meminfo to find out the default
      hugepage size, and use that.  Later, on kernels that support requests
      for nondefault sizes, we might try to consider other alternatives.
      But that smells more like a new feature than a bug fix, especially if
      we want to provide any way for the DBA to control it, so leave it for
      another day.
      
      I set this up to allow easy addition of platform-specific code for
      non-Linux platforms, if needed; but right now there are no reports
      suggesting that we need to work harder on other platforms.
      
      Back-patch to 9.4 where hugepage support was introduced.
      
      Discussion: <31056.1476303954@sss.pgh.pa.us>
      cb775768
    • Tom Lane's avatar
      Clean up handling of anonymous mmap'd shared-memory segment. · 15fc5e15
      Tom Lane authored
      Fix detaching of the mmap'd segment to have its own on_shmem_exit callback,
      rather than piggybacking on the one for detaching from the SysV segment.
      That was confusing, and given the distance between the two attach calls,
      it was trouble waiting to happen.
      
      Make the detaching calls idempotent by clearing AnonymousShmem to show
      we've already unmapped.  I spent quite a bit of time yesterday trying
      to find a path that would allow the munmap()'s to be done twice, and
      while I did not succeed, it seems silly that there's even a question.
      
      Make the #ifdef logic less confusing by separating "do we want to use
      anonymous shmem" from EXEC_BACKEND.  Even though there's no current
      scenario where those conditions are different, it is not helpful for
      different places in the same file to be testing EXEC_BACKEND for what
      are fundamentally different reasons.
      
      Don't do on_exit_reset() in StartBackgroundWorker().  At best that's
      useless (InitPostmasterChild would have done it already) and at worst
      it could zap some callback that's unrelated to shared memory.
      
      Improve comments, and simplify the huge_pages enablement logic slightly.
      
      Back-patch to 9.4 where hugepage support was introduced.
      Arguably this should go into 9.3 as well, but the code looks
      significantly different there, and I doubt it's worth the
      trouble of adapting the patch given I can't show a live bug.
      15fc5e15
    • Tom Lane's avatar
      Fix pg_dumpall regression test to be locale-independent. · 0a4bf6b1
      Tom Lane authored
      The expected results in commit b4fc6457 seem to have been generated
      in a non-C locale, which just points up the fact that the ORDER BY
      clause was locale-sensitive.
      
      Per buildfarm.
      0a4bf6b1
    • Tom Lane's avatar
      Fix broken jsonb_set() logic for replacing array elements. · 9c4cc9e2
      Tom Lane authored
      Commit 0b62fd03 did a fairly sloppy job of refactoring setPath()
      to support jsonb_insert() along with jsonb_set().  In its defense,
      though, there was no regression test case exercising the case of
      replacing an existing element in a jsonb array.
      
      Per bug #14366 from Peng Sun.  Back-patch to 9.6 where bug was introduced.
      
      Report: <20161012065349.1412.47858@wrigleys.postgresql.org>
      9c4cc9e2
    • Andres Freund's avatar
      Fix further hash table order dependent tests. · ccbb852c
      Andres Freund authored
      Similar to 0137caf2, this makes contrib and pl tests less dependant on
      hash-table order.  After this commit, at least some order affecting
      changes to execGrouping.c don't result in regression test changes
      anymore.
      ccbb852c
    • Andres Freund's avatar
      Make pg_dumpall's database ACL query independent of hash table order. · b4fc6457
      Andres Freund authored
      Previously GRANT order on databases was not well defined, due to the use
      of EXCEPT without an ORDER BY.  Add an ORDER BY, adapt test output.
      
      I don't, at the moment, see reason to backpatch this.
      b4fc6457
    • Robert Haas's avatar
      Remove spurious word. · 248776ea
      Robert Haas authored
      Tatsuo Ishii
      248776ea
  2. 12 Oct, 2016 7 commits
    • Tom Lane's avatar
      Revert addition of PGDLLEXPORT in PG_FUNCTION_INFO_V1 macro. · 4f52fd3c
      Tom Lane authored
      This turns out not to be as harmless as I thought: MSVC will complain
      if it sees an "extern" declaration without PGDLLEXPORT and then one with.
      (Seems fairly silly, given that this can be changed after the fact by the
      linker, but there you have it.)  Therefore, contrib modules that have
      extern's for V1 functions in header files are falling over in the
      buildfarm, since none of those externs are marked PGDLLEXPORT.
      
      We might or might not conclude that we're willing to plaster those
      declarations with PGDLLEXPORT in HEAD, but in any case there's no way we're
      going to ship this change in the back branches.  Third-party authors would
      not thank us for breaking their code in a minor release.  Hence, revert
      the addition of PGDLLEXPORT (but let's keep the extra info in the comment).
      If we do the other changes we can revert this commit in HEAD.
      
      Per buildfarm.
      4f52fd3c
    • Tom Lane's avatar
      pg_dump's getTypes() needn't retrieve typinput or typoutput anymore. · c0a3b211
      Tom Lane authored
      Commit 64f3524e removed the stanza of code that examined these values.
      I failed to notice they were unnecessary because my compiler didn't
      warn about the un-read variables.  Noted by Peter Eisentraut.
      c0a3b211
    • Tom Lane's avatar
      Remove unnecessary int2vector-specific hash function and equality operator. · 5c80642a
      Tom Lane authored
      These functions were originally added in commit d8cedf67 to support
      use of int2vector columns as catcache lookup keys.  However, there are
      no catcaches that use such columns.  (Indeed I now think it must always
      have been dead code: a catcache with such a key column would need an
      underlying unique index on the column, but we've never had an int2vector
      btree opclass.)
      
      Getting rid of the int2vector-specific operator and function does not
      lose any functionality, because operations on int2vectors will now fall
      back to the generic anyarray support.  This avoids a wart that a btree
      index on an int2vector column (made using anyarray_ops) would fail to
      match equality searches, because int2vectoreq wasn't a member of the
      opclass.  We don't really care much about that, since int2vector is not
      meant as a type for users to use, but it's silly to have extra code and
      less functionality.
      
      If we ever do want a catcache to be indexed by an int2vector column,
      we'd need to put back full btree and hash opclasses for int2vector,
      comparable to the support for oidvector.  (The anyarray code can't be
      used at such a low level, because it needs to do catcache lookups.)
      But we'll deal with that if/when the need arises.
      
      Also worth noting is that removal of the hash int2vector_ops opclass will
      break any user-created hash indexes on int2vector columns.  While hash
      anyarray_ops would serve the same purpose, it would probably not compute
      the same hash values and thus wouldn't be on-disk-compatible.  Given that
      int2vector isn't a user-facing type and we're planning other incompatible
      changes in hash indexes for v10 anyway, this doesn't seem like something
      to worry about, but it's probably worth mentioning here.
      
      Amit Langote
      
      Discussion: <d9bb74f8-b194-7307-9ebd-90645d377e45@lab.ntt.co.jp>
      5c80642a
    • Tom Lane's avatar
      Provide DLLEXPORT markers for C functions via PG_FUNCTION_INFO_V1 macro. · 8518583c
      Tom Lane authored
      This isn't really necessary for our own code, because we use a .DEF file
      in MSVC builds (see gendef.pl), or --export-all-symbols in MinGW and
      Cygwin builds, to ensure that all global symbols in loadable modules
      will be exported on Windows.  However, third-party authors might use
      different build processes that need this marker, and it's harmless
      enough for our own builds.
      
      To some extent, this is an oversight in commit e7128e8d, so back-patch
      to 9.4 where that was added.
      
      Laurenz Albe
      
      Discussion: <A737B7A37273E048B164557ADEF4A58B539300BD@ntex2010a.host.magwien.gv.at>
      8518583c
    • Tom Lane's avatar
      Remove pg_dump/pg_dumpall support for dumping from pre-8.0 servers. · 64f3524e
      Tom Lane authored
      The need for dumping from such ancient servers has decreased to about nil
      in the field, so let's remove all the code that catered to it.  Aside
      from removing a lot of boilerplate variant queries, this allows us to not
      have to cope with servers that don't have (a) schemas or (b) pg_depend.
      That means we can get rid of assorted squishy code around that.  There
      may be some nonobvious additional simplifications possible, but this patch
      already removes about 1500 lines of code.
      
      I did not remove the ability for pg_restore to read custom-format archives
      generated by these old versions (and light testing says that that does
      still work).  If you have an old server, you probably also have a pg_dump
      that will work with it; but you have an old custom-format backup file,
      that might be all you have.
      
      It'd be possible at this point to remove fmtQualifiedId()'s version
      argument, but I refrained since that would affect code outside pg_dump.
      
      Discussion: <2661.1475849167@sss.pgh.pa.us>
      64f3524e
    • Heikki Linnakangas's avatar
      Fix copy-pasto in comment. · bb55dd60
      Heikki Linnakangas authored
      Amit Langote
      bb55dd60
    • Heikki Linnakangas's avatar
      Simplify the code for logical tape read buffers. · b75f467b
      Heikki Linnakangas authored
      Pass the buffer size as argument to LogicalTapeRewindForRead, rather than
      setting it earlier with the separate LogicTapeAssignReadBufferSize call.
      This way, the buffer size is set closer to where it's actually used, which
      makes the code easier to understand.
      
      This makes the calculation for how much memory to use for the buffers less
      precise. We now use the same amount of memory for every tape, rounded down
      to the nearest BLCKSZ boundary, instead of using one more block for some
      tapes, to get the total up to exact amount of memory available. That should
      be OK, merging isn't too sensitive to the exact amount of memory used.
      
      Reviewed by Peter Geoghegan
      
      Discussion: <0f607c4b-df23-353e-bf56-c0389d28495f@iki.fi>
      b75f467b
  3. 11 Oct, 2016 4 commits
    • Tom Lane's avatar
      Drop server support for FE/BE protocol version 1.0. · 2f1eaf87
      Tom Lane authored
      While this isn't a lot of code, it's been essentially untestable for
      a very long time, because libpq doesn't support anything older than
      protocol 2.0, and has not since release 6.3.  There's no reason to
      believe any other client-side code still uses that protocol, either.
      
      Discussion: <2661.1475849167@sss.pgh.pa.us>
      2f1eaf87
    • Tom Lane's avatar
      Remove "sco" and "unixware" ports. · 2b860f52
      Tom Lane authored
      SCO OpenServer and SCO UnixWare are more or less dead platforms.
      We have never had a buildfarm member testing the "sco" port, and
      the last "unixware" member was last heard from in 2012, so it's
      fair to doubt that the code even compiles anymore on either one.
      Remove both ports.  We can always undo this if someone shows up
      with an interest in maintaining and testing these platforms.
      
      Discussion: <17177.1476136994@sss.pgh.pa.us>
      2b860f52
    • Tom Lane's avatar
      Docs: grammatical fix. · c7e56811
      Tom Lane authored
      Fix poor grammar introduced in 741ccd50.
      c7e56811
    • Tom Lane's avatar
      Improve documentation for CREATE RECURSIVE VIEW. · e3431872
      Tom Lane authored
      It was perhaps not entirely clear that internal self-references shouldn't
      be schema-qualified even if the view name is written with a schema.
      Spell it out.
      
      Discussion: <871sznz69m.fsf@metapensiero.it>
      e3431872
  4. 10 Oct, 2016 5 commits
    • Tom Lane's avatar
      Update user docs for switch to POSIX semaphores. · 3d21f08b
      Tom Lane authored
      Since commit ecb0d20a hasn't crashed and burned, here's the promised
      docs update for it.
      
      In addition to explaining that Linux and FreeBSD ports now use POSIX
      semaphores, I did some wordsmithing on pre-existing wording; in
      particular trying to clarify which SysV parameters need to be set with
      an eye to total usage across all applications.
      3d21f08b
    • Andres Freund's avatar
      Make regression tests less dependent on hash table order. · 0137caf2
      Andres Freund authored
      Upcoming changes to the hash table code used, among others, for grouping
      and set operations will change the output order for a few queries. To
      make it less likely that actual bugs are hidden between regression test
      ordering changes, and to make the tests robust against platform
      dependant ordering, add ORDER BYs guaranteeing the output order.
      
      As it's possible that some of the changes expose platform dependant
      ordering, push this earlier, to let the buildfarm shake out potentially
      unstable results.
      
      Discussion: <20160727004333.r3e2k2y6fvk2ntup@alap3.anarazel.de>
      0137caf2
    • Tom Lane's avatar
      In PQsendQueryStart(), avoid leaking any left-over async result. · 886f6c5c
      Tom Lane authored
      Ordinarily there would not be an async result sitting around at this
      point, but it appears that in corner cases there can be.  Considering
      all the work we're about to launch, it's hardly going to cost anything
      noticeable to check.
      
      It's been like this forever, so back-patch to all supported branches.
      
      Report: <CAD-Qf1eLUtBOTPXyFQGW-4eEsop31tVVdZPu4kL9pbQ6tJPO8g@mail.gmail.com>
      886f6c5c
    • Heikki Linnakangas's avatar
      Remove some unnecessary #includes. · 6fb12cbc
      Heikki Linnakangas authored
      Amit Langote
      6fb12cbc
    • Peter Eisentraut's avatar
      52f0142e
  5. 09 Oct, 2016 2 commits
    • Tom Lane's avatar
      Use unnamed POSIX semaphores, if available, on Linux and FreeBSD. · ecb0d20a
      Tom Lane authored
      We've had support for using unnamed POSIX semaphores instead of System V
      semaphores for quite some time, but it was not used by default on any
      platform.  Since many systems have rather small limits on the number of
      SysV semaphores allowed, it seems desirable to switch to POSIX semaphores
      where they're available and don't create performance or kernel resource
      problems.  Experimentation by me shows that unnamed POSIX semaphores
      are at least as good as SysV semaphores on Linux, and we previously had
      a report from Maksym Sobolyev that FreeBSD is significantly worse with
      SysV semaphores than POSIX ones.  So adjust those two platforms to use
      unnamed POSIX semaphores, if configure can find the necessary library
      functions.  If this goes well, we may switch other platforms as well,
      but it would be advisable to test them individually first.
      
      It's not currently contemplated that we'd encourage users to select
      a semaphore API for themselves, but anyone who wants to experiment
      can add PREFERRED_SEMAPHORES=UNNAMED_POSIX (or NAMED_POSIX, or SYSV)
      to their configure command line to do so.
      
      I also tweaked configure to report which API it's selected, mainly
      so that we can tell that from buildfarm reports.
      
      I did not touch the user documentation's discussion about semaphores;
      that will need some adjustment once the dust settles.
      
      Discussion: <8536.1475704230@sss.pgh.pa.us>
      ecb0d20a
    • Tom Lane's avatar
      Fix incorrect handling of polymorphic aggregates used as window functions. · ac4a9d92
      Tom Lane authored
      The transfunction was told that its first argument and result were
      of the window function output type, not the aggregate state type.
      This'd only matter if the transfunction consults get_fn_expr_argtype,
      which typically only polymorphic functions would do.
      
      Although we have several regression tests around polymorphic aggs,
      none of them detected this mistake --- in fact, they still didn't
      fail when I injected the same mistake into nodeAgg.c.  So add some
      more tests covering both plain agg and window-function-agg cases.
      
      Per report from Sebastian Luque.  Back-patch to 9.6 where the error
      was introduced (by sloppy refactoring in commit 804163bc, looks like).
      
      Report: <87int2qkat.fsf@gmail.com>
      ac4a9d92
  6. 08 Oct, 2016 2 commits
    • Tom Lane's avatar
      Fix two bugs in merging of inherited CHECK constraints. · e55a946a
      Tom Lane authored
      Historically, we've allowed users to add a CHECK constraint to a child
      table and then add an identical CHECK constraint to the parent.  This
      results in "merging" the two constraints so that the pre-existing
      child constraint ends up with both conislocal = true and coninhcount > 0.
      However, if you tried to do it in the other order, you got a duplicate
      constraint error.  This is problematic for pg_dump, which needs to issue
      separated ADD CONSTRAINT commands in some cases, but has no good way to
      ensure that the constraints will be added in the required order.
      And it's more than a bit arbitrary, too.  The goal of complaining about
      duplicated ADD CONSTRAINT commands can be served if we reject the case of
      adding a constraint when the existing one already has conislocal = true;
      but if it has conislocal = false, let's just make the ADD CONSTRAINT set
      conislocal = true.  In this way, either order of adding the constraints
      has the same end result.
      
      Another problem was that the code allowed creation of a parent constraint
      marked convalidated that is merged with a child constraint that is
      !convalidated.  In this case, an inheritance scan of the parent table could
      emit some rows violating the constraint condition, which would be an
      unexpected result given the marking of the parent constraint as validated.
      Hence, forbid merging of constraints in this case.  (Note: valid child and
      not-valid parent seems fine, so continue to allow that.)
      
      Per report from Benedikt Grundmann.  Back-patch to 9.2 where we introduced
      possibly-not-valid check constraints.  The second bug obviously doesn't
      apply before that, and I think the first doesn't either, because pg_dump
      only gets into this situation when dealing with not-valid constraints.
      
      Report: <CADbMkNPT-Jz5PRSQ4RbUASYAjocV_KHUWapR%2Bg8fNvhUAyRpxA%40mail.gmail.com>
      Discussion: <22108.1475874586@sss.pgh.pa.us>
      e55a946a
    • Tom Lane's avatar
      libpqwalreceiver needs to link with libintl when using --enable-nls. · 8811f5d3
      Tom Lane authored
      The need for this was previously obscured even on picky platforms
      by the hack we used to support direct cross-module references in
      the transforms contrib modules.  Now that that hack is gone, the
      undefined symbol is exposed, as reported by Robert Haas.
      
      Back-patch to 9.5 where we started to use -Wl,-undefined,dynamic_lookup.
      I'm a bit surprised that the older branches don't seem to contain
      any gettext references in this module, but since they don't fail
      at build time, they must not.  (We might be able to get away with
      leaving this alone in 9.5/9.6, but I think it's cleaner if the
      reference gets resolved at link time.)
      
      Report: <CA+TgmoaHJKU5kcWZcYduATYVT7Mnx+8jUnycaYYL7OtCwCigug@mail.gmail.com>
      8811f5d3
  7. 07 Oct, 2016 8 commits
    • Andres Freund's avatar
      Fix fallback implementation of pg_atomic_write_u32(). · b0779abb
      Andres Freund authored
      I somehow had assumed that in the spinlock (in turn possibly using
      semaphores) based fallback atomics implementation 32 bit writes could be
      done without a lock. As far as the write goes that's correct, since
      postgres supports only platforms with single-copy atomicity for aligned
      32bit writes.  But writing without holding the spinlock breaks
      read-modify-write operations like pg_atomic_compare_exchange_u32(),
      since they'll potentially "miss" a concurrent write, which can't happen
      in actual hardware implementations.
      
      In 9.6+ when using the fallback atomics implementation this could lead
      to buffer header locks not being properly marked as released, and
      potentially some related state corruption.  I don't see a related danger
      in 9.5 (earliest release with the API), because pg_atomic_write_u32()
      wasn't used in a concurrent manner there.
      
      The state variable of local buffers, before this change, were
      manipulated using pg_atomic_write_u32(), to avoid unnecessary
      synchronization overhead. As that'd not be the case anymore, introduce
      and use pg_atomic_unlocked_write_u32(), which does not correctly
      interact with RMW operations.
      
      This bug only caused issues when postgres is compiled on platforms
      without atomics support (i.e. no common new platform), or when compiled
      with --disable-atomics, which explains why this wasn't noticed in
      testing.
      
      Reported-By: Tom Lane
      Discussion: <14947.1475690465@sss.pgh.pa.us>
      Backpatch: 9.5-, where the atomic operations API was introduced.
      b0779abb
    • Heikki Linnakangas's avatar
      Remove bogus mapping from UTF-8 to SJIS conversion table. · 0aec7f9a
      Heikki Linnakangas authored
      0xc19c is not a valid UTF-8 byte sequence. It doesn't do any harm, AFAICS,
      but it's surely not intentional. No backpatching though, just to be sure.
      
      In the passing, also add a file header comment to the file, like the
      UCS_to_SJIS.pl script would produce. (The file was originally created with
      UCS_to_SJIS.pl, but has been modified by hand since then. That's
      questionable, but I'll leave fixing that for later.)
      
      Kyotaro Horiguchi
      
      Discussion: <20160907.155050.233844095.horiguchi.kyotaro@lab.ntt.co.jp>
      0aec7f9a
    • Heikki Linnakangas's avatar
      Make TAP test suites to work, when @INC does not contain current dir. · d668b033
      Heikki Linnakangas authored
      Recent Perl and/or new Linux distributions are starting to remove "." from
      the @INC list by default. That breaks pg_rewind and ssl test suites, which
      use helper perl modules that reside in the same directory. To fix, add the
      current source directory explicitly to prove's include dir.
      
      The vcregress.pl script probably also needs something like this, but I
      wasn't able to remove '.' from @INC on Windows to test this, and don't want
      to try doing that blindly.
      
      Discussion: <20160908204529.flg6nivjuwp5vaoy@alap3.anarazel.de>
      d668b033
    • Tom Lane's avatar
      Fix python shlib probe for Cygwin. · 17a3a1eb
      Tom Lane authored
      On buildfarm member cockatiel, that library is in /usr/bin.
      (Possibly we should look at $PATH on this platform?)
      Per off-list report from Andrew Dunstan.
      17a3a1eb
    • Tom Lane's avatar
      Fix pg_dump to work against pre-9.0 servers again. · 4806f26f
      Tom Lane authored
      getBlobs' queries for pre-9.0 servers were broken in two ways:
      the 7.x/8.x query uses DISTINCT so it can't have unspecified-type
      NULLs in the target list, and both that query and the 7.0 one
      failed to provide the correct output column labels, so that the
      subsequent code to extract data from the PGresult would fail.
      
      Back-patch to 9.6 where the breakage was introduced (by commit 23f34fa4).
      
      Amit Langote and Tom Lane
      
      Discussion: <0a3e7a0e-37bd-8427-29bd-958135862f0a@lab.ntt.co.jp>
      4806f26f
    • Heikki Linnakangas's avatar
      Don't allow both --source-server and --source-target args to pg_rewind. · 0d4d7d61
      Heikki Linnakangas authored
      They are supposed to be mutually exclusive, but there was no check for
      that.
      
      Michael Banck
      
      Discussion: <20161007103414.GD12247@nighthawk.caipicrew.dd-dns.de>
      0d4d7d61
    • Heikki Linnakangas's avatar
      Clear OpenSSL error queue after failed X509_STORE_load_locations() call. · 275bf986
      Heikki Linnakangas authored
      Leaving the error in the error queue used to be harmless, because the
      X509_STORE_load_locations() call used to be the last step in
      initialize_SSL(), and we would clear the queue before the next
      SSL_connect() call. But previous commit moved things around. The symptom
      was that if a CRL file was not found, and one of the subsequent
      initialization steps, like loading the client certificate or private key,
      failed, we would incorrectly print the "no such file" error message from
      the earlier X509_STORE_load_locations() call as the reason.
      
      Backpatch to all supported versions, like the previous patch.
      275bf986
    • Heikki Linnakangas's avatar
      Don't share SSL_CTX between libpq connections. · 8bb14cdd
      Heikki Linnakangas authored
      There were several issues with the old coding:
      
      1. There was a race condition, if two threads opened a connection at the
         same time. We used a mutex around SSL_CTX_* calls, but that was not
         enough, e.g. if one thread SSL_CTX_load_verify_locations() with one
         path, and another thread set it with a different path, before the first
         thread got to establish the connection.
      
      2. Opening two different connections, with different sslrootcert settings,
         seemed to fail outright with "SSL error: block type is not 01". Not sure
         why.
      
      3. We created the SSL object, before calling SSL_CTX_load_verify_locations
         and SSL_CTX_use_certificate_chain_file on the SSL context. That was
         wrong, because the options set on the SSL context are propagated to the
         SSL object, when the SSL object is created. If they are set after the
         SSL object has already been created, they won't take effect until the
         next connection. (This is bug #14329)
      
      At least some of these could've been fixed while still using a shared
      context, but it would've been more complicated and error-prone. To keep
      things simple, let's just use a separate SSL context for each connection,
      and accept the overhead.
      
      Backpatch to all supported versions.
      
      Report, analysis and test case by Kacper Zuk.
      
      Discussion: <20160920101051.1355.79453@wrigleys.postgresql.org>
      8bb14cdd
  8. 06 Oct, 2016 2 commits
    • Heikki Linnakangas's avatar
      Disable synchronous commits in pg_rewind. · d7eb76b9
      Heikki Linnakangas authored
      If you point pg_rewind to a server that is using synchronous replication,
      with "pg_rewind --source-server=...", and the replication is not working
      for some reason, pg_rewind will get stuck because it creates a temporary
      table, which needs to be replicated. You could call broken replication a
      pilot error, but pg_rewind is often used in special circumstances, when
      there are changes to the replication setup.
      
      We don't do any "real" updates, and we don't care about fsyncing or
      replicating the operations on the temporary tables, so fix that by
      setting synchronous_commit off.
      
      Michael Banck, Michael Paquier. Backpatch to 9.5, where pg_rewind was
      introduced.
      
      Discussion: <20161005143938.GA12247@nighthawk.caipicrew.dd-dns.de>
      d7eb76b9
    • Heikki Linnakangas's avatar
      Fix excessive memory consumption in the new sort pre-reading code. · b56fb691
      Heikki Linnakangas authored
      LogicalTapeRewind() should not allocate large read buffer, if the tape
      is completely empty. The calling code relies on that, for its
      calculation of how much memory to allocate for the read buffers. That
      lead to massive overallocation of memory, if maxTapes was high, but
      only a few tapes were actually used.
      
      Reported by Tomas Vondra
      
      Discussion: <7303da46-daf7-9c68-3cc1-9f83235cf37e@2ndquadrant.com>
      b56fb691