Revert "Display the time when the process started waiting for the lock, in pg_locks."
authorFujii Masao <[email protected]>
Tue, 9 Feb 2021 09:30:40 +0000 (18:30 +0900)
committerFujii Masao <[email protected]>
Tue, 9 Feb 2021 09:30:40 +0000 (18:30 +0900)
This reverts commit 3b733fcd04195399db56f73f0616b4f5c6828e18.

Per buildfarm members prion and rorqual.

contrib/amcheck/expected/check_btree.out
doc/src/sgml/catalogs.sgml
src/backend/storage/ipc/standby.c
src/backend/storage/lmgr/lock.c
src/backend/storage/lmgr/proc.c
src/backend/utils/adt/lockfuncs.c
src/include/catalog/catversion.h
src/include/catalog/pg_proc.dat
src/include/storage/lock.h
src/include/storage/proc.h
src/test/regress/expected/rules.out

index 5a3f1ef737cf89de4a33ca82c14626edd4c711dc..13848b7449b7ff487493bff181f920c2eb52c404 100644 (file)
@@ -97,8 +97,8 @@ SELECT bt_index_parent_check('bttest_b_idx');
 SELECT * FROM pg_locks
 WHERE relation = ANY(ARRAY['bttest_a', 'bttest_a_idx', 'bttest_b', 'bttest_b_idx']::regclass[])
     AND pid = pg_backend_pid();
- locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted | fastpath | waitstart 
-----------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-----+------+---------+----------+-----------
+ locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted | fastpath 
+----------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-----+------+---------+----------
 (0 rows)
 
 COMMIT;
index 9085d2e64c3e2911c44832bd8e32851b0279567c..ea222c04640b123c2cf54f36f60be987bfb354a6 100644 (file)
@@ -10604,19 +10604,6 @@ SCRAM-SHA-256$<replaceable>&lt;iteration count&gt;</replaceable>:<replaceable>&l
        lock table
       </para></entry>
      </row>
-
-     <row>
-      <entry role="catalog_table_entry"><para role="column_definition">
-       <structfield>waitstart</structfield> <type>timestamptz</type>
-      </para>
-      <para>
-       Time when the server process started waiting for this lock,
-       or null if the lock is held.
-       Note that this can be null for a very short period of time after
-       the wait started even though <structfield>granted</structfield>
-       is <literal>false</literal>.
-      </para></entry>
-     </row>
     </tbody>
    </tgroup>
   </table>
index 5877a60715f742aeb4624ee6b89cd065ccb3d563..39a30c00f7a3670154c32b9b2f7f455c85a5a841 100644 (file)
@@ -540,34 +540,12 @@ void
 ResolveRecoveryConflictWithLock(LOCKTAG locktag, bool logging_conflict)
 {
    TimestampTz ltime;
-   TimestampTz now;
 
    Assert(InHotStandby);
 
    ltime = GetStandbyLimitTime();
-   now = GetCurrentTimestamp();
 
-   /*
-    * Update waitStart if first time through after the startup process
-    * started waiting for the lock. It should not be updated every time
-    * ResolveRecoveryConflictWithLock() is called during the wait.
-    *
-    * Use the current time obtained for comparison with ltime as waitStart
-    * (i.e., the time when this process started waiting for the lock). Since
-    * getting the current time newly can cause overhead, we reuse the
-    * already-obtained time to avoid that overhead.
-    *
-    * Note that waitStart is updated without holding the lock table's
-    * partition lock, to avoid the overhead by additional lock acquisition.
-    * This can cause "waitstart" in pg_locks to become NULL for a very short
-    * period of time after the wait started even though "granted" is false.
-    * This is OK in practice because we can assume that users are likely to
-    * look at "waitstart" when waiting for the lock for a long time.
-    */
-   if (pg_atomic_read_u64(&MyProc->waitStart) == 0)
-       pg_atomic_write_u64(&MyProc->waitStart, now);
-
-   if (now >= ltime && ltime != 0)
+   if (GetCurrentTimestamp() >= ltime && ltime != 0)
    {
        /*
         * We're already behind, so clear a path as quickly as possible.
index 108b4d9023898a01a23a475850b5c43b18e75caa..79c1cf9b8b4e39df83a10ff766d5e0a14de69c94 100644 (file)
@@ -3619,12 +3619,6 @@ GetLockStatusData(void)
            instance->leaderPid = proc->pid;
            instance->fastpath = true;
 
-           /*
-            * Successfully taking fast path lock means there were no
-            * conflicting locks.
-            */
-           instance->waitStart = 0;
-
            el++;
        }
 
@@ -3652,7 +3646,6 @@ GetLockStatusData(void)
            instance->pid = proc->pid;
            instance->leaderPid = proc->pid;
            instance->fastpath = true;
-           instance->waitStart = 0;
 
            el++;
        }
@@ -3705,7 +3698,6 @@ GetLockStatusData(void)
        instance->pid = proc->pid;
        instance->leaderPid = proclock->groupLeader->pid;
        instance->fastpath = false;
-       instance->waitStart = (TimestampTz) pg_atomic_read_u64(&proc->waitStart);
 
        el++;
    }
index f059d60a0f6f86c98e69cc3d6a3b64e7b672e70b..c87ffc654919a5e248dab25f9b4bde82b6a6d500 100644 (file)
@@ -402,7 +402,6 @@ InitProcess(void)
    MyProc->lwWaitMode = 0;
    MyProc->waitLock = NULL;
    MyProc->waitProcLock = NULL;
-   pg_atomic_init_u64(&MyProc->waitStart, 0);
 #ifdef USE_ASSERT_CHECKING
    {
        int         i;
@@ -1263,23 +1262,6 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
        }
        else
            enable_timeout_after(DEADLOCK_TIMEOUT, DeadlockTimeout);
-
-       /*
-        * Use the current time obtained for the deadlock timeout timer as
-        * waitStart (i.e., the time when this process started waiting for the
-        * lock). Since getting the current time newly can cause overhead, we
-        * reuse the already-obtained time to avoid that overhead.
-        *
-        * Note that waitStart is updated without holding the lock table's
-        * partition lock, to avoid the overhead by additional lock
-        * acquisition. This can cause "waitstart" in pg_locks to become NULL
-        * for a very short period of time after the wait started even though
-        * "granted" is false. This is OK in practice because we can assume
-        * that users are likely to look at "waitstart" when waiting for the
-        * lock for a long time.
-        */
-       pg_atomic_write_u64(&MyProc->waitStart,
-                           get_timeout_start_time(DEADLOCK_TIMEOUT));
    }
    else if (log_recovery_conflict_waits)
    {
@@ -1696,7 +1678,6 @@ ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus)
    proc->waitLock = NULL;
    proc->waitProcLock = NULL;
    proc->waitStatus = waitStatus;
-   pg_atomic_write_u64(&MyProc->waitStart, 0);
 
    /* And awaken it */
    SetLatch(&proc->procLatch);
index 97f0265c12debc7829a170b20ec1f0ac2cb1c2e9..b1cf5b79a75fed6cfac1474fb2b4217b6caa1c42 100644 (file)
@@ -63,7 +63,7 @@ typedef struct
 } PG_Lock_Status;
 
 /* Number of columns in pg_locks output */
-#define NUM_LOCK_STATUS_COLUMNS        16
+#define NUM_LOCK_STATUS_COLUMNS        15
 
 /*
  * VXIDGetDatum - Construct a text representation of a VXID
@@ -142,8 +142,6 @@ pg_lock_status(PG_FUNCTION_ARGS)
                           BOOLOID, -1, 0);
        TupleDescInitEntry(tupdesc, (AttrNumber) 15, "fastpath",
                           BOOLOID, -1, 0);
-       TupleDescInitEntry(tupdesc, (AttrNumber) 16, "waitstart",
-                          TIMESTAMPTZOID, -1, 0);
 
        funcctx->tuple_desc = BlessTupleDesc(tupdesc);
 
@@ -338,10 +336,6 @@ pg_lock_status(PG_FUNCTION_ARGS)
        values[12] = CStringGetTextDatum(GetLockmodeName(instance->locktag.locktag_lockmethodid, mode));
        values[13] = BoolGetDatum(granted);
        values[14] = BoolGetDatum(instance->fastpath);
-       if (!granted && instance->waitStart != 0)
-           values[15] = TimestampTzGetDatum(instance->waitStart);
-       else
-           nulls[15] = true;
 
        tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
        result = HeapTupleGetDatum(tuple);
@@ -412,7 +406,6 @@ pg_lock_status(PG_FUNCTION_ARGS)
        values[12] = CStringGetTextDatum("SIReadLock");
        values[13] = BoolGetDatum(true);
        values[14] = BoolGetDatum(false);
-       nulls[15] = true;
 
        tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
        result = HeapTupleGetDatum(tuple);
index c1a5dd4ee7ace4bb0be3e3836c9eaffb493423c1..638830aaac1aae58180157db3801551f6e0000ad 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 202102091
+#define CATALOG_VERSION_NO 202102021
 
 #endif
index 1487710d590773c8a64170c24f78c1370f0de834..4e0c9be58c31474f6d506d7aedb0f37f50d17096 100644 (file)
 { oid => '1371', descr => 'view system lock information',
   proname => 'pg_lock_status', prorows => '1000', proretset => 't',
   provolatile => 'v', prorettype => 'record', proargtypes => '',
-  proallargtypes => '{text,oid,oid,int4,int2,text,xid,oid,oid,int2,text,int4,text,bool,bool,timestamptz}',
-  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
-  proargnames => '{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted,fastpath,waitstart}',
+  proallargtypes => '{text,oid,oid,int4,int2,text,xid,oid,oid,int2,text,int4,text,bool,bool}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted,fastpath}',
   prosrc => 'pg_lock_status' },
 { oid => '2561',
   descr => 'get array of PIDs of sessions blocking specified backend PID from acquiring a heavyweight lock',
index 9b2a421c32c25e8a69a84194a337d943cd2ffd57..68a3487d49f3c40a4e36927eb4dcb1ddbc22de50 100644 (file)
@@ -22,7 +22,6 @@
 #include "storage/lockdefs.h"
 #include "storage/lwlock.h"
 #include "storage/shmem.h"
-#include "utils/timestamp.h"
 
 /* struct PGPROC is declared in proc.h, but must forward-reference it */
 typedef struct PGPROC PGPROC;
@@ -447,8 +446,6 @@ typedef struct LockInstanceData
    LOCKMODE    waitLockMode;   /* lock awaited by this PGPROC, if any */
    BackendId   backend;        /* backend ID of this PGPROC */
    LocalTransactionId lxid;    /* local transaction ID of this PGPROC */
-   TimestampTz waitStart;      /* time at which this PGPROC started waiting
-                                * for lock */
    int         pid;            /* pid of this PGPROC */
    int         leaderPid;      /* pid of group leader; = pid if no group */
    bool        fastpath;       /* taken via fastpath? */
index a777cb64a1cfc687d06799639706cb9163e59218..683ab64f76b8d7261bd9b14bbcf7412b5b780c03 100644 (file)
@@ -181,8 +181,6 @@ struct PGPROC
    LOCKMODE    waitLockMode;   /* type of lock we're waiting for */
    LOCKMASK    heldLocks;      /* bitmask for lock types already held on this
                                 * lock object by this backend */
-   pg_atomic_uint64 waitStart; /* time at which wait for lock acquisition
-                                * started */
 
    bool        delayChkpt;     /* true if this proc delays checkpoint start */
 
index 10a1f34ebc172a25d56cb296a3e1904f554ac809..b632d9f2eab18d47e632ebb9b1c1c466834ad3c8 100644 (file)
@@ -1394,9 +1394,8 @@ pg_locks| SELECT l.locktype,
     l.pid,
     l.mode,
     l.granted,
-    l.fastpath,
-    l.waitstart
-   FROM pg_lock_status() l(locktype, database, relation, page, tuple, virtualxid, transactionid, classid, objid, objsubid, virtualtransaction, pid, mode, granted, fastpath, waitstart);
+    l.fastpath
+   FROM pg_lock_status() l(locktype, database, relation, page, tuple, virtualxid, transactionid, classid, objid, objsubid, virtualtransaction, pid, mode, granted, fastpath);
 pg_matviews| SELECT n.nspname AS schemaname,
     c.relname AS matviewname,
     pg_get_userbyid(c.relowner) AS matviewowner,