1. 15 4月, 2015 4 次提交
    • P
      Integrate pg_upgrade_support module into backend · 30982be4
      Peter Eisentraut 提交于
      Previously, these functions were created in a schema "binary_upgrade",
      which was deleted after pg_upgrade was finished.  Because we don't want
      to keep that schema around permanently, move them to pg_catalog but
      rename them with a binary_upgrade_... prefix.
      
      The provided functions are only small wrappers around global variables
      that were added specifically for pg_upgrade use, so keeping the module
      separate does not create any modularity.
      
      The functions still check that they are only called in binary upgrade
      mode, so it is not possible to call these during normal operation.
      Reviewed-by: NMichael Paquier <michael.paquier@gmail.com>
      30982be4
    • H
      Optimize pg_comp_crc32c_sse42 routine slightly, and also use it on x86. · 936546dc
      Heikki Linnakangas 提交于
      Eliminate the separate 'len' variable from the loops, and also use the 4
      byte instruction. This shaves off a few more cycles. Even though this
      routine that uses the special SSE 4.2 instructions is much faster than a
      generic routine, it's still a hot spot, so let's make it as fast as
      possible.
      
      Change the configure test to not test _mm_crc32_u64. That variant is only
      available in the 64-bit x86-64 architecture, not in 32-bit x86. Modify
      pg_comp_crc32c_sse42 so that it only uses _mm_crc32_u64 on x86-64. With
      these changes, the SSE accelerated CRC-32C implementation can also be used
      on 32-bit x86 systems.
      
      This also fixes the 32-bit MSVC build.
      936546dc
    • H
      Oops, fix misspelled #endif · b73e7a07
      Heikki Linnakangas 提交于
      I hope this fixes the Windows builfarm failures.
      b73e7a07
    • H
      Try to fix the CRC-32C autoconf magic for icc compiler. · b4eb2d16
      Heikki Linnakangas 提交于
      On gcc and clang, the _mm_crc32_u8 and _mm_crc32_u64 intrinsics are not
      defined at all, when not building with -msse4.2. But on icc, they are.
      So we cannot assume that if those intrinsics are defined, we can always use
      them safely, we might still need the runtime check.
      
      To fix, check if the __SSE_4_2__ preprocessor symbol is defined. That's
      supposed to be defined only when the compiler is targeting a processor that
      has SSE 4.2 support.
      
      Per buildfarm members fulmar and okapi.
      b4eb2d16
  2. 14 4月, 2015 6 次提交
    • A
      Fix typo in comment · 0a52fafc
      Alvaro Herrera 提交于
      SLRU_SEGMENTS_PER_PAGE -> SLRU_PAGES_PER_SEGMENT
      
      I introduced this ancient typo in subtrans.c and later propagated it to
      multixact.c.  I fixed the latter in f741300c, but only back to 9.3;
      backpatch to all supported branches for consistency.
      0a52fafc
    • H
      Use Intel SSE 4.2 CRC instructions where available. · 3dc2d62d
      Heikki Linnakangas 提交于
      Modern x86 and x86-64 processors with SSE 4.2 support have special
      instructions, crc32b and crc32q, for calculating CRC-32C. They greatly
      speed up CRC calculation.
      
      Whether the instructions can be used or not depends on the compiler and the
      target architecture. If generation of SSE 4.2 instructions is allowed for
      the target (-msse4.2 flag on gcc and clang), use them. If they are not
      allowed by default, but the compiler supports the -msse4.2 flag to enable
      them, compile just the CRC-32C function with -msse4.2 flag, and check at
      runtime whether the processor we're running on supports it. If it doesn't,
      fall back to the slicing-by-8 algorithm. (With the common defaults on
      current operating systems, the runtime-check variant is what you get in
      practice.)
      
      Abhijit Menon-Sen, heavily modified by me, reviewed by Andres Freund.
      3dc2d62d
    • H
      Reorganize our CRC source files again. · 4f700bcd
      Heikki Linnakangas 提交于
      Now that we use CRC-32C in WAL and the control file, the "traditional" and
      "legacy" CRC-32 variants are not used in any frontend programs anymore.
      Move the code for those back from src/common to src/backend/utils/hash.
      
      Also move the slicing-by-8 implementation (back) to src/port. This is in
      preparation for next patch that will add another implementation that uses
      Intel SSE 4.2 instructions to calculate CRC-32C, where available.
      4f700bcd
    • P
      pgbench: Attempt fix build on Windows · d577bb86
      Peter Eisentraut 提交于
      d577bb86
    • A
      Remove duplicated word in README · b5213e14
      Alvaro Herrera 提交于
      b5213e14
    • P
      81134af3
  3. 13 4月, 2015 7 次提交
    • H
      Fix pg_rewind regression tests in VPATH builds · b22a36a6
      Heikki Linnakangas 提交于
      Should call just "pg_rewind", instead of "./pg_rewind". The tests are called
      so that PATH contains the temporariy installation bin dir.
      
      Per report from Alvaro Herrera
      b22a36a6
    • H
      Refactor and fix TAP tests of pg_rewind · 53ba1077
      Heikki Linnakangas 提交于
      * Don't pass arguments to prove, since that's not supported on perl 5.8
      which is the minimum version supported by the TAP tests. Refactor the
      test files themselves to run the tests twice, in both local and remote mode.
      
      * Use eq rather than == for string comparison. This thinko caused the remote
      versions of the tests to never run.
      
      * Add "use strict" and "use warnings", and fix warnings that that produced.
      
      * Increase the delay after standby promotion, to make the tests more robust.
      
      * In remote mode, the connection string to the promoted standby was
      incorrect, leading to connection errors.
      
      Patch by Michael Paquier, to address Peter Eisentraut's report.
      53ba1077
    • H
      Don't archive bogus recycled or preallocated files after timeline switch. · b2a5545b
      Heikki Linnakangas 提交于
      After a timeline switch, we would leave behind recycled WAL segments that
      are in the future, but on the old timeline. After promotion, and after they
      become old enough to be recycled again, we would notice that they don't have
      a .ready or .done file, create a .ready file for them, and archive them.
      That's bogus, because the files contain garbage, recycled from an older
      timeline (or prealloced as zeros). We shouldn't archive such files.
      
      This could happen when we're following a timeline switch during replay, or
      when we switch to new timeline at end-of-recovery.
      
      To fix, whenever we switch to a new timeline, scan the data directory for
      WAL segments on the old timeline, but with a higher segment number, and
      remove them. Those don't belong to our timeline history, and are most
      likely bogus recycled or preallocated files. They could also be valid files
      that we streamed from the primary ahead of time, but in any case, they're
      not needed to recover to the new timeline.
      b2a5545b
    • F
      Silence gettext warning about '\r' escape sequence in translatable string. · 1f94bec7
      Fujii Masao 提交于
      gettext was unhappy about the commit b216ad7b because it revealed
      the problem that internationalized messages may contain '\r' escape
      sequence in pg_rewind. This commit moves '\r' to a separate printf() call.
      
      Michael Paquier, bug reported by Peter Eisentraut
      1f94bec7
    • P
      emacs: Set indent-tabs-mode in perl-mode · 442663f1
      Peter Eisentraut 提交于
      This matches existing practice, but makes the setup complete and
      consistent with the C code setup.
      442663f1
    • H
      Free leaked result set in pg_rewind · 74a68e37
      Heikki Linnakangas 提交于
      It was not significant in practice, it was just one instance of a small
      result set, but let's pacify Coverity.
      
      Michael Paquier
      74a68e37
    • M
      Add system view pg_stat_ssl · 9029f4b3
      Magnus Hagander 提交于
      This view shows information about all connections, such as if the
      connection is using SSL, which cipher is used, and which client
      certificate (if any) is used.
      
      Reviews by Alex Shulgin, Heikki Linnakangas, Andres Freund & Michael Paquier
      9029f4b3
  4. 12 4月, 2015 2 次提交
  5. 11 4月, 2015 1 次提交
    • A
      Optimize locking a tuple already locked by another subxact · 27846f02
      Alvaro Herrera 提交于
      Locking and updating the same tuple repeatedly led to some strange
      multixacts being created which had several subtransactions of the same
      parent transaction holding locks of the same strength.  However,
      once a subxact of the current transaction holds a lock of a given
      strength, it's not necessary to acquire the same lock again.  This made
      some coding patterns much slower than required.
      
      The fix is twofold.  First we change HeapTupleSatisfiesUpdate to return
      HeapTupleBeingUpdated for the case where the current transaction is
      already a single-xid locker for the given tuple; it used to return
      HeapTupleMayBeUpdated for that case.  The new logic is simpler, and the
      change to pgrowlocks is a testament to that: previously we needed to
      check for the single-xid locker separately in a very ugly way.  That
      test is simpler now.
      
      As fallout from the HTSU change, some of its callers need to be amended
      so that tuple-locked-by-own-transaction is taken into account in the
      BeingUpdated case rather than the MayBeUpdated case.  For many of them
      there is no difference; but heap_delete() and heap_update now check
      explicitely and do not grab tuple lock in that case.
      
      The HTSU change also means that routine MultiXactHasRunningRemoteMembers
      introduced in commit 11ac4c73 is no longer necessary and can be
      removed; the case that used to require it is now handled naturally as
      result of the changes to heap_delete and heap_update.
      
      The second part of the fix to the performance issue is to adjust
      heap_lock_tuple to avoid the slowness:
      
      1. Previously we checked for the case that our own transaction already
      held a strong enough lock and returned MayBeUpdated, but only in the
      multixact case.  Now we do it for the plain Xid case as well, which
      saves having to LockTuple.
      
      2. If the current transaction is the only locker of the tuple (but with
      a lock not as strong as what we need; otherwise it would have been
      caught in the check mentioned above), we can skip sleeping on the
      multixact, and instead go straight to create an updated multixact with
      the additional lock strength.
      
      3. Most importantly, make sure that both the single-xid-locker case and
      the multixact-locker case optimization are applied always.  We do this
      by checking both in a single place, rather than them appearing in two
      separate portions of the routine -- something that is made possible by
      the HeapTupleSatisfiesUpdate API change.  Previously we would only check
      for the single-xid case when HTSU returned MayBeUpdated, and only
      checked for the multixact case when HTSU returned BeingUpdated.  This
      was at odds with what HTSU actually returned in one case: if our own
      transaction was locker in a multixact, it returned MayBeUpdated, so the
      optimization never applied.  This is what led to the large multixacts in
      the first place.
      
      Per bug report #8470 by Oskari Saarenmaa.
      27846f02
  6. 10 4月, 2015 4 次提交
  7. 09 4月, 2015 6 次提交
    • M
      Fix typo · c9970ab9
      Magnus Hagander 提交于
      Michael Paquier
      c9970ab9
    • M
      Fix incorrect punctuation · 8ae4600c
      Magnus Hagander 提交于
      Amit Langote
      8ae4600c
    • A
      Fix typo in eb68379c. · 06d36fa4
      Andres Freund 提交于
      I'd accidentally missed to rename PG_FORCE_NULL to BKI_FORCE_NULL in one
      place.
      
      Author: Jeevan Chalke
      Discussion: CAM2+6=VPoow5PqgqiTjPX4QNeokb7op8aD_8Zg3QnHZMvvU0GQ@mail.gmail.com
      06d36fa4
    • F
      Remove obsolete FORCE option from REINDEX. · 17d436d2
      Fujii Masao 提交于
      FORCE option has been marked "obsolete" since very old version 7.4
      but existed for backwards compatibility. Per discussion on pgsql-hackers,
      we concluded that it's no longer worth keeping supporting the option.
      17d436d2
    • A
      Change SQLSTATE for event triggers "wrong context" message · 73206812
      Alvaro Herrera 提交于
      When certain event-trigger-only functions are called when not in the
      wrong context, they were reporting the "feature not supported" SQLSTATE,
      which is somewhat misleading.  Create a new custom error code for such
      uses instead.
      
      Not backpatched since it may be seen as an undesirable behavioral
      change.
      
      Author: Michael Paquier
      Discussion: https://www.postgresql.org/message-id/CAB7nPqQ-5NAkHQHh_NOm7FPep37NCiLKwPoJ2Yxb8TDoGgbYYA@mail.gmail.com
      73206812
    • A
      Fix autovacuum launcher shutdown sequence · 5df64f29
      Alvaro Herrera 提交于
      It was previously possible to have the launcher re-execute its main loop
      before shutting down if some other signal was received or an error
      occurred after getting SIGTERM, as reported by Qingqing Zhou.
      
      While investigating, Tom Lane further noticed that if autovacuum had
      been disabled in the config file, it would misbehave by trying to start
      a new worker instead of bailing out immediately -- it would consider
      itself as invoked in emergency mode.
      
      Fix both problems by checking the shutdown flag in a few more places.
      These problems have existed since autovacuum was introduced, so
      backpatch all the way back.
      5df64f29
  8. 08 4月, 2015 10 次提交