Skip to content
Snippets Groups Projects
  1. Mar 12, 2014
  2. Mar 03, 2014
    • Robert Haas's avatar
      Introduce logical decoding. · b89e1510
      Robert Haas authored
      This feature, building on previous commits, allows the write-ahead log
      stream to be decoded into a series of logical changes; that is,
      inserts, updates, and deletes and the transactions which contain them.
      It is capable of handling decoding even across changes to the schema
      of the effected tables.  The output format is controlled by a
      so-called "output plugin"; an example is included.  To make use of
      this in a real replication system, the output plugin will need to be
      modified to produce output in the format appropriate to that system,
      and to perform filtering.
      
      Currently, information can be extracted from the logical decoding
      system only via SQL; future commits will add the ability to stream
      changes via walsender.
      
      Andres Freund, with review and other contributions from many other
      people, including Álvaro Herrera, Abhijit Menon-Sen, Peter Gheogegan,
      Kevin Grittner, Robert Haas, Heikki Linnakangas, Fujii Masao, Abhijit
      Menon-Sen, Michael Paquier, Simon Riggs, Craig Ringer, and Steve
      Singer.
      b89e1510
  3. Mar 02, 2014
    • Stephen Frost's avatar
      Various Coverity-spotted fixes · b1aebbb6
      Stephen Frost authored
      A number of issues were identified by the Coverity scanner and are
      addressed in this patch.  None of these appear to be security issues
      and many are mostly cosmetic changes.
      
      Short comments for each of the changes follows.
      
      Correct the semi-colon placement in be-secure.c regarding SSL retries.
      Remove a useless comparison-to-NULL in proc.c (value is dereferenced
        prior to this check and therefore can't be NULL).
      Add checking of chmod() return values to initdb.
      Fix a couple minor memory leaks in initdb.
      Fix memory leak in pg_ctl- involves free'ing the config file contents.
      Use an int to capture fgetc() return instead of an enum in pg_dump.
      Fix minor memory leaks in pg_dump.
        (note minor change to convertOperatorReference()'s API)
      Check fclose()/remove() return codes in psql.
      Check fstat(), find_my_exec() return codes in psql.
      Various ECPG memory leak fixes.
      Check find_my_exec() return in ECPG.
      Explicitly ignore pqFlush return in libpq error-path.
      Change PQfnumber() to avoid doing an strdup() when no changes required.
      Remove a few useless check-against-NULL's (value deref'd beforehand).
      Check rmtree(), malloc() results in pg_regress.
      Also check get_alternative_expectfile() return in pg_regress.
      b1aebbb6
  4. Feb 01, 2014
    • Robert Haas's avatar
      Introduce replication slots. · 858ec118
      Robert Haas authored
      Replication slots are a crash-safe data structure which can be created
      on either a master or a standby to prevent premature removal of
      write-ahead log segments needed by a standby, as well as (with
      hot_standby_feedback=on) pruning of tuples whose removal would cause
      replication conflicts.  Slots have some advantages over existing
      techniques, as explained in the documentation.
      
      In a few places, we refer to the type of replication slots introduced
      by this patch as "physical" slots, because forthcoming patches for
      logical decoding will also have slots, but with somewhat different
      properties.
      
      Andres Freund and Robert Haas
      858ec118
    • Robert Haas's avatar
      Clear MyProc and MyProcSignalState before they become invalid. · d1981719
      Robert Haas authored
      Evidence from buildfarm member crake suggests that the new test_shm_mq
      module is routinely crashing the server due to the arrival of a SIGUSR1
      after the shared memory segment has been unmapped.  Although processes
      using the new dynamic background worker facilities are more likely to
      receive a SIGUSR1 around this time, the problem is also possible on older
      branches, so I'm back-patching the parts of this change that apply to
      older branches as far as they apply.
      
      It's already generally the case that code checks whether these pointers
      are NULL before deferencing them, so the important thing is mostly to
      make sure that they do get set to NULL before they become invalid.  But
      in master, there's one case in procsignal_sigusr1_handler that lacks a
      NULL guard, so add that.
      
      Patch by me; review by Tom Lane.
      d1981719
  5. Jan 27, 2014
    • Robert Haas's avatar
      Relax the requirement that all lwlocks be stored in a single array. · ea9df812
      Robert Haas authored
      This makes it possible to store lwlocks as part of some other data
      structure in the main shared memory segment, or in a dynamic shared
      memory segment.  There is still a main LWLock array and this patch does
      not move anything out of it, but it provides necessary infrastructure
      for doing that in the future.
      
      This change is likely to increase the size of LWLockPadded on some
      platforms, especially 32-bit platforms where it was previously only
      16 bytes.
      
      Patch by me.  Review by Andres Freund and KaiGai Kohei.
      ea9df812
  6. Jan 07, 2014
  7. Nov 29, 2013
    • Tom Lane's avatar
      Fix assorted race conditions in the new timeout infrastructure. · 16e1b7a1
      Tom Lane authored
      Prevent handle_sig_alarm from losing control partway through due to a query
      cancel (either an asynchronous SIGINT, or a cancel triggered by one of the
      timeout handler functions).  That would at least result in failure to
      schedule any required future interrupt, and might result in actual
      corruption of timeout.c's data structures, if the interrupt happened while
      we were updating those.
      
      We could still lose control if an asynchronous SIGINT arrives just as the
      function is entered.  This wouldn't break any data structures, but it would
      have the same effect as if the SIGALRM interrupt had been silently lost:
      we'd not fire any currently-due handlers, nor schedule any new interrupt.
      To forestall that scenario, forcibly reschedule any pending timer interrupt
      during AbortTransaction and AbortSubTransaction.  We can avoid any extra
      kernel call in most cases by not doing that until we've allowed
      LockErrorCleanup to kill the DEADLOCK_TIMEOUT and LOCK_TIMEOUT events.
      
      Another hazard is that some platforms (at least Linux and *BSD) block a
      signal before calling its handler and then unblock it on return.  When we
      longjmp out of the handler, the unblock doesn't happen, and the signal is
      left blocked indefinitely.  Again, we can fix that by forcibly unblocking
      signals during AbortTransaction and AbortSubTransaction.
      
      These latter two problems do not manifest when the longjmp reaches
      postgres.c, because the error recovery code there kills all pending timeout
      events anyway, and it uses sigsetjmp(..., 1) so that the appropriate signal
      mask is restored.  So errors thrown outside any transaction should be OK
      already, and cleaning up in AbortTransaction and AbortSubTransaction should
      be enough to fix these issues.  (We're assuming that any code that catches
      a query cancel error and doesn't re-throw it will do at least a
      subtransaction abort to clean up; but that was pretty much required already
      by other subsystems.)
      
      Lastly, ProcSleep should not clear the LOCK_TIMEOUT indicator flag when
      disabling that event: if a lock timeout interrupt happened after the lock
      was granted, the ensuing query cancel is still going to happen at the next
      CHECK_FOR_INTERRUPTS, and we want to report it as a lock timeout not a user
      cancel.
      
      Per reports from Dan Wood.
      
      Back-patch to 9.3 where the new timeout handling infrastructure was
      introduced.  We may at some point decide to back-patch the signal
      unblocking changes further, but I'll desist from that until we hear
      actual field complaints about it.
      16e1b7a1
  8. Sep 17, 2013
  9. Jul 04, 2013
    • Robert Haas's avatar
      Add new GUC, max_worker_processes, limiting number of bgworkers. · 6bc8ef0b
      Robert Haas authored
      In 9.3, there's no particular limit on the number of bgworkers;
      instead, we just count up the number that are actually registered,
      and use that to set MaxBackends.  However, that approach causes
      problems for Hot Standby, which needs both MaxBackends and the
      size of the lock table to be the same on the standby as on the
      master, yet it may not be desirable to run the same bgworkers in
      both places.  9.3 handles that by failing to notice the problem,
      which will probably work fine in nearly all cases anyway, but is
      not theoretically sound.
      
      A further problem with simply counting the number of registered
      workers is that new workers can't be registered without a
      postmaster restart.  This is inconvenient for administrators,
      since bouncing the postmaster causes an interruption of service.
      Moreover, there are a number of applications for background
      processes where, by necessity, the background process must be
      started on the fly (e.g. parallel query).  While this patch
      doesn't actually make it possible to register new background
      workers after startup time, it's a necessary prerequisite.
      
      Patch by me.  Review by Michael Paquier.
      6bc8ef0b
  10. May 29, 2013
  11. Mar 17, 2013
    • Tom Lane's avatar
      Add lock_timeout configuration parameter. · d43837d0
      Tom Lane authored
      This GUC allows limiting the time spent waiting to acquire any one
      heavyweight lock.
      
      In support of this, improve the recently-added timeout infrastructure
      to permit efficiently enabling or disabling multiple timeouts at once.
      That reduces the performance hit from turning on lock_timeout, though
      it's still not zero.
      
      Zoltán Böszörményi, reviewed by Tom Lane,
      Stephen Frost, and Hari Babu
      d43837d0
  12. Jan 01, 2013
  13. Dec 06, 2012
    • Alvaro Herrera's avatar
      Background worker processes · da07a1e8
      Alvaro Herrera authored
      Background workers are postmaster subprocesses that run arbitrary
      user-specified code.  They can request shared memory access as well as
      backend database connections; or they can just use plain libpq frontend
      database connections.
      
      Modules listed in shared_preload_libraries can register background
      workers in their _PG_init() function; this is early enough that it's not
      necessary to provide an extra GUC option, because the necessary extra
      resources can be allocated early on.  Modules can install more than one
      bgworker, if necessary.
      
      Care is taken that these extra processes do not interfere with other
      postmaster tasks: only one such process is started on each ServerLoop
      iteration.  This means a large number of them could be waiting to be
      started up and postmaster is still able to quickly service external
      connection requests.  Also, shutdown sequence should not be impacted by
      a worker process that's reasonably well behaved (i.e. promptly responds
      to termination signals.)
      
      The current implementation lets worker processes specify their start
      time, i.e. at what point in the server startup process they are to be
      started: right after postmaster start (in which case they mustn't ask
      for shared memory access), when consistent state has been reached
      (useful during recovery in a HOT standby server), or when recovery has
      terminated (i.e. when normal backends are allowed).
      
      In case of a bgworker crash, actions to take depend on registration
      data: if shared memory was requested, then all other connections are
      taken down (as well as other bgworkers), just like it were a regular
      backend crashing.  The bgworker itself is restarted, too, within a
      configurable timeframe (which can be configured to be never).
      
      More features to add to this framework can be imagined without much
      effort, and have been discussed, but this seems good enough as a useful
      unit already.
      
      An elementary sample module is supplied.
      
      Author: Álvaro Herrera
      
      This patch is loosely based on prior patches submitted by KaiGai Kohei,
      and unsubmitted code by Simon Riggs.
      
      Reviewed by: KaiGai Kohei, Markus Wanner, Andres Freund,
      Heikki Linnakangas, Simon Riggs, Amit Kapila
      da07a1e8
  14. Dec 03, 2012
    • Simon Riggs's avatar
      Refactor inCommit flag into generic delayChkpt flag. · f21bb9cf
      Simon Riggs authored
      Rename PGXACT->inCommit flag into delayChkpt flag,
      and generalise comments to allow use in other situations,
      such as the forthcoming potential use in checksum patch.
      Replace wait loop to look for VXIDs with delayChkpt set.
      No user visible changes, not behaviour changes at present.
      
      Simon Riggs, reviewed and rebased by Jeff Davis
      f21bb9cf
  15. Nov 29, 2012
  16. Oct 15, 2012
    • Tom Lane's avatar
      Split up process latch initialization for more-fail-soft behavior. · e81e8f93
      Tom Lane authored
      In the previous coding, new backend processes would attempt to create their
      self-pipe during the OwnLatch call in InitProcess.  However, pipe creation
      could fail if the kernel is short of resources; and the system does not
      recover gracefully from a FATAL error right there, since we have armed the
      dead-man switch for this process and not yet set up the on_shmem_exit
      callback that would disarm it.  The postmaster then forces an unnecessary
      database-wide crash and restart, as reported by Sean Chittenden.
      
      There are various ways we could rearrange the code to fix this, but the
      simplest and sanest seems to be to split out creation of the self-pipe into
      a new function InitializeLatchSupport, which must be called from a place
      where failure is allowed.  For most processes that gets called in
      InitProcess or InitAuxiliaryProcess, but processes that don't call either
      but still use latches need their own calls.
      
      Back-patch to 9.1, which has only a part of the latch logic that 9.2 and
      HEAD have, but nonetheless includes this bug.
      e81e8f93
  17. Aug 30, 2012
  18. Jul 26, 2012
    • Robert Haas's avatar
      Log a better message when canceling autovacuum. · d7318d43
      Robert Haas authored
      The old message was at DEBUG2, so typically it didn't show up in the
      log at all.  As a result, in most cases where autovacuum was canceled,
      the only information that was logged was the table being vacuumed,
      with no indication as to what problem caused the cancel.  Crank up
      the level to LOG and add some more details to assist with debugging.
      
      Back-patch all the way, per discussion on pgsql-hackers.
      d7318d43
  19. Jul 17, 2012
    • Alvaro Herrera's avatar
      Introduce timeout handling framework · f34c68f0
      Alvaro Herrera authored
      Management of timeouts was getting a little cumbersome; what we
      originally had was more than enough back when we were only concerned
      about deadlocks and query cancel; however, when we added timeouts for
      standby processes, the code got considerably messier.  Since there are
      plans to add more complex timeouts, this seems a good time to introduce
      a central timeout handling module.
      
      External modules register their timeout handlers during process
      initialization, and later enable and disable them as they see fit using
      a simple API; timeout.c is in charge of keeping track of which timeouts
      are in effect at any time, installing a common SIGALRM signal handler,
      and calling setitimer() as appropriate to ensure timely firing of
      external handlers.
      
      timeout.c additionally supports pluggable modules to add their own
      timeouts, though this capability isn't exercised anywhere yet.
      
      Additionally, as of this commit, walsender processes are aware of
      timeouts; we had a preexisting bug there that made those ignore SIGALRM,
      thus being subject to unhandled deadlocks, particularly during the
      authentication phase.  This has already been fixed in back branches in
      commit 0bf8eb2a, which see for more details.
      
      Main author: Zoltán Böszörményi
      Some review and cleanup by Álvaro Herrera
      Extensive reworking by Tom Lane
      f34c68f0
  20. Jun 24, 2012
    • Heikki Linnakangas's avatar
      Replace XLogRecPtr struct with a 64-bit integer. · 0ab9d1c4
      Heikki Linnakangas authored
      This simplifies code that needs to do arithmetic on XLogRecPtrs.
      
      To avoid changing on-disk format of data pages, the LSN on data pages is
      still stored in the old format. That should keep pg_upgrade happy. However,
      we have XLogRecPtrs embedded in the control file, and in the structs that
      are sent over the replication protocol, so this changes breaks compatibility
      of pg_basebackup and server. I didn't do anything about this in this patch,
      per discussion on -hackers, the right thing to do would to be to change the
      replication protocol to be architecture-independent, so that you could use
      a newer version of pg_receivexlog, for example, against an older server
      version.
      0ab9d1c4
  21. Jun 10, 2012
  22. May 14, 2012
    • Heikki Linnakangas's avatar
      Update comments that became out-of-date with the PGXACT struct. · 9e4637bf
      Heikki Linnakangas authored
      When the "hot" members of PGPROC were split off to separate PGXACT structs,
      many PGPROC fields referred to in comments were moved to PGXACT, but the
      comments were neglected in the commit. Mostly this is just a search/replace
      of PGPROC with PGXACT, but the way the dummy PGPROC entries are created for
      prepared transactions changed more, making some of the comments totally
      bogus.
      
      Noah Misch
      9e4637bf
  23. May 10, 2012
    • Tom Lane's avatar
      Improve control logic for bgwriter hibernation mode. · 6308ba05
      Tom Lane authored
      Commit 6d90eaaa added a hibernation mode
      to the bgwriter to reduce the server's idle-power consumption.  However,
      its interaction with the detailed behavior of BgBufferSync's feedback
      control loop wasn't very well thought out.  That control loop depends
      primarily on the rate of buffer allocation, not the rate of buffer
      dirtying, so the hibernation mode has to be designed to operate only when
      no new buffer allocations are happening.  Also, the check for whether the
      system is effectively idle was not quite right and would fail to detect
      a constant low level of activity, thus allowing the bgwriter to go into
      hibernation mode in a way that would let the cycle time vary quite a bit,
      possibly further confusing the feedback loop.  To fix, move the wakeup
      support from MarkBufferDirty and SetBufferCommitInfoNeedsSave into
      StrategyGetBuffer, and prevent the bgwriter from entering hibernation mode
      unless no buffer allocations have happened recently.
      
      In addition, fix the delaying logic to remove the problem of possibly not
      responding to signals promptly, which was basically caused by trying to use
      the process latch's is_set flag for multiple purposes.  I can't prove it
      but I'm suspicious that that hack was responsible for the intermittent
      "postmaster does not shut down" failures we've been seeing in the buildfarm
      lately.  In any case it did nothing to improve the readability or
      robustness of the code.
      
      In passing, express the hibernation sleep time as a multiplier on
      BgWriterDelay, not a constant.  I'm not sure whether there's any value in
      exposing the longer sleep time as an independently configurable setting,
      but we can at least make it act like this for little extra code.
      6308ba05
  24. May 09, 2012
    • Tom Lane's avatar
      Reduce idle power consumption of walwriter and checkpointer processes. · 5461564a
      Tom Lane authored
      This patch modifies the walwriter process so that, when it has not found
      anything useful to do for many consecutive wakeup cycles, it extends its
      sleep time to reduce the server's idle power consumption.  It reverts to
      normal as soon as it's done any successful flushes.  It's still true that
      during any async commit, backends check for completed, unflushed pages of
      WAL and signal the walwriter if there are any; so that in practice the
      walwriter can get awakened and returned to normal operation sooner than the
      sleep time might suggest.
      
      Also, improve the checkpointer so that it uses a latch and a computed delay
      time to not wake up at all except when it has something to do, replacing a
      previous hardcoded 0.5 sec wakeup cycle.  This also is primarily useful for
      reducing the server's power consumption when idle.
      
      In passing, get rid of the dedicated latch for signaling the walwriter in
      favor of using its procLatch, since that comports better with possible
      generic signal handlers using that latch.  Also, fix a pre-existing bug
      with failure to save/restore errno in walwriter's signal handlers.
      
      Peter Geoghegan, somewhat simplified by Tom
      5461564a
  25. May 04, 2012
    • Tom Lane's avatar
      Overdue code review for transaction-level advisory locks patch. · 71b9549d
      Tom Lane authored
      Commit 62c7bd31 had assorted problems, most
      visibly that it broke PREPARE TRANSACTION in the presence of session-level
      advisory locks (which should be ignored by PREPARE), as per a recent
      complaint from Stephen Rees.  More abstractly, the patch made the
      LockMethodData.transactional flag not merely useless but outright
      dangerous, because in point of fact that flag no longer tells you anything
      at all about whether a lock is held transactionally.  This fix therefore
      removes that flag altogether.  We now rely entirely on the convention
      already in use in lock.c that transactional lock holds must be owned by
      some ResourceOwner, while session holds are never so owned.  Setting the
      locallock struct's owner link to NULL thus denotes a session hold, and
      there is no redundant marker for that.
      
      PREPARE TRANSACTION now works again when there are session-level advisory
      locks, and it is also able to transfer transactional advisory locks to the
      prepared transaction, but for implementation reasons it throws an error if
      we hold both types of lock on a single lockable object.  Perhaps it will be
      worth improving that someday.
      
      Assorted other minor cleanup and documentation editing, as well.
      
      Back-patch to 9.1, except that in the 9.1 branch I did not remove the
      LockMethodData.transactional flag for fear of causing an ABI break for
      any external code that might be examining those structs.
      71b9549d
  26. Apr 18, 2012
    • Robert Haas's avatar
      Tighten up error recovery for fast-path locking. · 53c5b869
      Robert Haas authored
      The previous code could cause a backend crash after BEGIN; SAVEPOINT a;
      LOCK TABLE foo (interrupted by ^C or statement timeout); ROLLBACK TO
      SAVEPOINT a; LOCK TABLE foo, and might have leaked strong-lock counts
      in other situations.
      
      Report by Zoltán Böszörményi; patch review by Jeff Davis.
      53c5b869
  27. Mar 21, 2012
  28. Jan 30, 2012
    • Heikki Linnakangas's avatar
      Make group commit more effective. · 9b38d46d
      Heikki Linnakangas authored
      When a backend needs to flush the WAL, and someone else is already flushing
      the WAL, wait until it releases the WALInsertLock and check if we still need
      to do the flush or if the other backend already did the work for us, before
      acquiring WALInsertLock. This helps group commit, because when the WAL flush
      finishes, all the backends that were waiting for it can be woken up in one
      go, and the can all concurrently observe that they're done, rather than
      waking them up one by one in a cascading fashion.
      
      This is based on a new LWLock function, LWLockWaitUntilFree(), which has
      peculiar semantics. If the lock is immediately free, it grabs the lock and
      returns true. If it's not free, it waits until it is released, but then
      returns false without grabbing the lock. This is used in XLogFlush(), so
      that when the lock is acquired, the backend flushes the WAL, but if it's
      not, the backend first checks the current flush location before retrying.
      
      Original patch and benchmarking by Peter Geoghegan and Simon Riggs, although
      this patch as committed ended up being very different from that.
      9b38d46d
  29. Jan 27, 2012
  30. Jan 02, 2012
  31. Nov 25, 2011
    • Robert Haas's avatar
      Move "hot" members of PGPROC into a separate PGXACT array. · ed0b409d
      Robert Haas authored
      This speeds up snapshot-taking and reduces ProcArrayLock contention.
      Also, the PGPROC (and PGXACT) structures used by two-phase commit are
      now allocated as part of the main array, rather than in a separate
      array, and we keep ProcArray sorted in pointer order.  These changes
      are intended to minimize the number of cache lines that must be pulled
      in to take a snapshot, and testing shows a substantial increase in
      performance on both read and write workloads at high concurrencies.
      
      Pavan Deolasee, Heikki Linnakangas, Robert Haas
      ed0b409d
  32. Nov 02, 2011
  33. Sep 09, 2011
    • Tom Lane's avatar
      Move Timestamp/Interval typedefs and basic macros into datatype/timestamp.h. · a7801b62
      Tom Lane authored
      As per my recent proposal, this refactors things so that these typedefs and
      macros are available in a header that can be included in frontend-ish code.
      I also changed various headers that were undesirably including
      utils/timestamp.h to include datatype/timestamp.h instead.  Unsurprisingly,
      this showed that half the system was getting utils/timestamp.h by way of
      xlog.h.
      
      No actual code changes here, just header refactoring.
      a7801b62
  34. Aug 10, 2011
    • Tom Lane's avatar
      Change the autovacuum launcher to use WaitLatch instead of a poll loop. · 4dab3d5a
      Tom Lane authored
      In pursuit of this (and with the expectation that WaitLatch will be needed
      in more places), convert the latch field that was already added to PGPROC
      for sync rep into a generic latch that is activated for all PGPROC-owning
      processes, and change many of the standard backend signal handlers to set
      that latch when a signal happens.  This will allow WaitLatch callers to be
      wakened properly by these signals.
      
      In passing, fix a whole bunch of signal handlers that had been hacked to do
      things that might change errno, without adding the necessary save/restore
      logic for errno.  Also make some minor fixes in unix_latch.c, and clean
      up bizarre and unsafe scheme for disowning the process's latch.  Much of
      this has to be back-patched into 9.1.
      
      Peter Geoghegan, with additional work by Tom
      4dab3d5a
  35. Aug 09, 2011
    • Tom Lane's avatar
      Documentation improvement and minor code cleanups for the latch facility. · 4e15a4db
      Tom Lane authored
      Improve the documentation around weak-memory-ordering risks, and do a pass
      of general editorialization on the comments in the latch code.  Make the
      Windows latch code more like the Unix latch code where feasible; in
      particular provide the same Assert checks in both implementations.
      Fix poorly-placed WaitLatch call in syncrep.c.
      
      This patch resolves, for the moment, concerns around weak-memory-ordering
      bugs in latch-related code: we have documented the restrictions and checked
      that existing calls meet them.  In 9.2 I hope that we will install suitable
      memory barrier instructions in SetLatch/ResetLatch, so that their callers
      don't need to be quite so careful.
      4e15a4db
  36. Aug 02, 2011
    • Tom Lane's avatar
      Move CheckRecoveryConflictDeadlock() call to a safer place. · ac36e6f7
      Tom Lane authored
      This kluge was inserted in a spot apparently chosen at random: the lock
      manager's state is not yet fully set up for the wait, and in particular
      LockWaitCancel hasn't been armed by setting lockAwaited, so the ProcLock
      will not get cleaned up if the ereport is thrown.  This seems to not cause
      any observable problem in trivial test cases, because LockReleaseAll will
      silently clean up the debris; but I was able to cause failures with tests
      involving subtransactions.
      
      Fixes breakage induced by commit c85c9414.
      Back-patch to all affected branches.
      ac36e6f7
    • Tom Lane's avatar
      Fix incorrect initialization of ProcGlobal->startupBufferPinWaitBufId. · 2e53bd55
      Tom Lane authored
      It was initialized in the wrong place and to the wrong value.  With bad
      luck this could result in incorrect query-cancellation failures in hot
      standby sessions, should a HS backend be holding pin on buffer number 1
      while trying to acquire a lock.
      2e53bd55
  37. Jul 18, 2011
    • Robert Haas's avatar
      Create a "fast path" for acquiring weak relation locks. · 3cba8999
      Robert Haas authored
      When an AccessShareLock, RowShareLock, or RowExclusiveLock is requested
      on an unshared database relation, and we can verify that no conflicting
      locks can possibly be present, record the lock in a per-backend queue,
      stored within the PGPROC, rather than in the primary lock table.  This
      eliminates a great deal of contention on the lock manager LWLocks.
      
      This patch also refactors the interface between GetLockStatusData() and
      pg_lock_status() to be a bit more abstract, so that we don't rely so
      heavily on the lock manager's internal representation details.  The new
      fast path lock structures don't have a LOCK or PROCLOCK structure to
      return, so we mustn't depend on that for purposes of listing outstanding
      locks.
      
      Review by Jeff Davis.
      3cba8999
  38. Jun 29, 2011
Loading