From 3d59ad00e8cc6a1bd919280be839fca152149ec2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 27 Sep 2001 16:29:13 +0000 Subject: [PATCH] Remove useless LockDisable() function and associated overhead, per my proposal of 26-Aug. --- doc/src/sgml/ref/postgres-ref.sgml | 13 +----- src/backend/bootstrap/bootstrap.c | 3 +- src/backend/storage/lmgr/lmgr.c | 72 ++++++++++-------------------- src/backend/storage/lmgr/lock.c | 30 +------------ src/backend/tcop/postgres.c | 16 ++----- src/backend/utils/init/postinit.c | 7 +-- src/include/miscadmin.h | 27 ++++++----- src/include/storage/lock.h | 4 +- 8 files changed, 45 insertions(+), 127 deletions(-) diff --git a/doc/src/sgml/ref/postgres-ref.sgml b/doc/src/sgml/ref/postgres-ref.sgml index 839a1e86a7..9c4266d7d6 100644 --- a/doc/src/sgml/ref/postgres-ref.sgml +++ b/doc/src/sgml/ref/postgres-ref.sgml @@ -1,5 +1,5 @@ @@ -33,7 +33,6 @@ Postgres documentation -fsitnmh -F -i - -L -N -o filename -O @@ -57,7 +56,6 @@ Postgres documentation -fsitnmh -F -i - -L -o filename -O -p database @@ -293,15 +291,6 @@ Postgres documentation - - -L - - - Turns off the locking system. - - - - -O diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 41b932a653..6a0a1306e2 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.115 2001/08/25 00:31:17 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.116 2001/09/27 16:29:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -389,7 +389,6 @@ BootstrapMain(int argc, char *argv[]) * backend initialization */ InitPostgres(dbName, NULL); - LockDisable(true); for (i = 0; i < MAXATTR; i++) { diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c index 6105a3248c..659c3381e0 100644 --- a/src/backend/storage/lmgr/lmgr.c +++ b/src/backend/storage/lmgr/lmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.50 2001/08/25 18:52:42 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.51 2001/09/27 16:29:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -145,9 +145,6 @@ LockRelation(Relation relation, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relation->rd_lockInfo.lockRelId.relId; tag.dbId = relation->rd_lockInfo.lockRelId.dbId; @@ -182,9 +179,6 @@ ConditionalLockRelation(Relation relation, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return true; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relation->rd_lockInfo.lockRelId.relId; tag.dbId = relation->rd_lockInfo.lockRelId.dbId; @@ -215,9 +209,6 @@ UnlockRelation(Relation relation, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relation->rd_lockInfo.lockRelId.relId; tag.dbId = relation->rd_lockInfo.lockRelId.dbId; @@ -243,9 +234,6 @@ LockRelationForSession(LockRelId *relid, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relid->relId; tag.dbId = relid->dbId; @@ -264,9 +252,6 @@ UnlockRelationForSession(LockRelId *relid, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relid->relId; tag.dbId = relid->dbId; @@ -277,15 +262,16 @@ UnlockRelationForSession(LockRelId *relid, LOCKMODE lockmode) /* * LockPage + * + * Obtain a page-level lock. This is currently used by some index access + * methods to lock index pages. For heap relations, it is used only with + * blkno == 0 to signify locking the relation for extension. */ void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relation->rd_lockInfo.lockRelId.relId; tag.dbId = relation->rd_lockInfo.lockRelId.dbId; @@ -304,9 +290,6 @@ UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = relation->rd_lockInfo.lockRelId.relId; tag.dbId = relation->rd_lockInfo.lockRelId.dbId; @@ -315,14 +298,21 @@ UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode) LockRelease(LockTableId, &tag, GetCurrentTransactionId(), lockmode); } +/* + * XactLockTableInsert + * + * Insert a lock showing that the given transaction ID is running --- + * this is done during xact startup. The lock can then be used to wait + * for the transaction to finish. + * + * We need no corresponding unlock function, since the lock will always + * be released implicitly at transaction commit/abort, never any other way. + */ void XactLockTableInsert(TransactionId xid) { LOCKTAG tag; - if (LockingDisabled()) - return; - MemSet(&tag, 0, sizeof(tag)); tag.relId = XactLockTableId; tag.dbId = InvalidOid; /* xids are globally unique */ @@ -333,43 +323,29 @@ XactLockTableInsert(TransactionId xid) elog(ERROR, "XactLockTableInsert: LockAcquire failed"); } -#ifdef NOT_USED -void -XactLockTableDelete(TransactionId xid) -{ - LOCKTAG tag; - - if (LockingDisabled()) - return; - - MemSet(&tag, 0, sizeof(tag)); - tag.relId = XactLockTableId; - tag.dbId = InvalidOid; - tag.objId.xid = xid; - - LockRelease(LockTableId, &tag, xid, ExclusiveLock); -} - -#endif - +/* + * XactLockTableWait + * + * Wait for the specified transaction to commit or abort. + */ void XactLockTableWait(TransactionId xid) { LOCKTAG tag; + TransactionId myxid = GetCurrentTransactionId(); - if (LockingDisabled()) - return; + Assert(! TransactionIdEquals(xid, myxid)); MemSet(&tag, 0, sizeof(tag)); tag.relId = XactLockTableId; tag.dbId = InvalidOid; tag.objId.xid = xid; - if (!LockAcquire(LockTableId, &tag, GetCurrentTransactionId(), + if (!LockAcquire(LockTableId, &tag, myxid, ShareLock, false)) elog(ERROR, "XactLockTableWait: LockAcquire failed"); - LockRelease(LockTableId, &tag, GetCurrentTransactionId(), ShareLock); + LockRelease(LockTableId, &tag, myxid, ShareLock); /* * Transaction was committed/aborted/crashed - we have to update diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 2d14245a09..3fc31ed6a2 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.94 2001/09/07 00:27:29 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.95 2001/09/27 16:29:12 tgl Exp $ * * NOTES * Outside modules can create a lock table and acquire/release @@ -165,11 +165,6 @@ SPINLOCK LockMgrLock; /* in Shmem or created in static LOCKMASK BITS_OFF[MAX_LOCKMODES]; static LOCKMASK BITS_ON[MAX_LOCKMODES]; -/* - * Disable flag - */ -static bool LockingIsDisabled; - /* * map from lockmethod to the lock table structure */ @@ -195,23 +190,6 @@ InitLocks(void) } } -/* - * LockDisable -- sets LockingIsDisabled flag to TRUE or FALSE. - */ -void -LockDisable(bool status) -{ - LockingIsDisabled = status; -} - -/* - * Boolean function to determine current locking status - */ -bool -LockingDisabled(void) -{ - return LockingIsDisabled; -} /* * Fetch the lock method table associated with a given lock @@ -509,9 +487,6 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag, return FALSE; } - if (LockingIsDisabled) - return TRUE; - masterLock = lockMethodTable->ctl->masterLock; SpinAcquire(masterLock); @@ -1047,9 +1022,6 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag, return FALSE; } - if (LockingIsDisabled) - return TRUE; - masterLock = lockMethodTable->ctl->masterLock; SpinAcquire(masterLock); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index feb8aea129..7fe5eae476 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.233 2001/09/21 17:06:12 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.234 2001/09/27 16:29:12 tgl Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1096,7 +1096,6 @@ usage(char *progname) printf("Developer options:\n"); printf(" -f [s|i|n|m|h] forbid use of some plan types\n"); printf(" -i do not execute queries\n"); - printf(" -L turn off locking\n"); printf(" -O allow system table structure changes\n"); printf(" -t [pa|pl|ex] show timings after each query\n"); printf(" -W NUM wait NUM seconds to allow attach from a debugger\n"); @@ -1207,7 +1206,7 @@ PostgresMain(int argc, char *argv[], optind = 1; /* reset after postmaster's usage */ - while ((flag = getopt(argc, argv, "A:B:c:CD:d:Eef:FiLNOPo:p:S:st:v:W:x:-:")) != EOF) + while ((flag = getopt(argc, argv, "A:B:c:CD:d:Eef:FiNOPo:p:S:st:v:W:x:-:")) != EOF) switch (flag) { case 'A': @@ -1314,15 +1313,6 @@ PostgresMain(int argc, char *argv[], dontExecute = true; break; - case 'L': - - /* - * turn off locking - */ - if (secure) - lockingOff = 1; - break; - case 'N': /* @@ -1726,7 +1716,7 @@ PostgresMain(int argc, char *argv[], if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.233 $ $Date: 2001/09/21 17:06:12 $\n"); + puts("$Revision: 1.234 $ $Date: 2001/09/27 16:29:12 $\n"); } /* diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 60338397db..2a57a7acd7 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.91 2001/09/08 15:24:00 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.92 2001/09/27 16:29:12 tgl Exp $ * * *------------------------------------------------------------------------- @@ -46,8 +46,6 @@ static void InitCommunication(void); static void ShutdownPostgres(void); static bool ThereIsAtLeastOneUser(void); -int lockingOff = 0; /* backend -L switch */ - /*** InitPostgres support ***/ @@ -327,9 +325,6 @@ InitPostgres(const char *dbname, const char *username) /* replace faked-up relcache entries with the real info */ RelationCacheInitializePhase2(); - if (lockingOff) - LockDisable(true); - /* * Figure out our postgres user id. In standalone mode we use a * fixed id, otherwise we figure it out from the authenticated diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index d1c8ca7598..456147b907 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -12,7 +12,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: miscadmin.h,v 1.91 2001/09/21 03:32:36 tgl Exp $ + * $Id: miscadmin.h,v 1.92 2001/09/27 16:29:13 tgl Exp $ * * NOTES * some of the information in this file should be moved to @@ -236,6 +236,7 @@ extern bool is_dbadmin(Oid dbid); /* current user is owner of database */ * pmod.h -- * * POSTGRES processing mode definitions. * *****************************************************************************/ + /* * Description: * There are three processing modes in POSTGRES. They are @@ -262,19 +263,6 @@ typedef enum ProcessingMode NormalProcessing /* normal processing */ } ProcessingMode; - -/***************************************************************************** - * pinit.h -- * - * POSTGRES initialization and cleanup definitions. * - *****************************************************************************/ - -/* in utils/init/postinit.c */ -extern int lockingOff; - -extern void InitPostgres(const char *dbname, const char *username); -extern void BaseInit(void); - -/* processing mode support stuff */ extern ProcessingMode Mode; #define IsBootstrapProcessingMode() ((bool)(Mode == BootstrapProcessing)) @@ -291,6 +279,17 @@ extern ProcessingMode Mode; #define GetProcessingMode() Mode + +/***************************************************************************** + * pinit.h -- * + * POSTGRES initialization and cleanup definitions. * + *****************************************************************************/ + +/* in utils/init/postinit.c */ +extern void InitPostgres(const char *dbname, const char *username); +extern void BaseInit(void); + +/* in utils/init/miscinit.c */ extern bool CreateDataDirLockFile(const char *datadir, bool amPostmaster); extern bool CreateSocketLockFile(const char *socketfile, bool amPostmaster); extern void TouchSocketLockFile(void); diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index 1010e6760b..ed134bcc77 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: lock.h,v 1.51 2001/07/09 22:18:34 tgl Exp $ + * $Id: lock.h,v 1.52 2001/09/27 16:29:13 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -244,8 +244,6 @@ typedef struct HOLDER * function prototypes */ extern void InitLocks(void); -extern void LockDisable(bool status); -extern bool LockingDisabled(void); extern LOCKMETHODTABLE *GetLocksMethodTable(LOCK *lock); extern LOCKMETHOD LockMethodTableInit(char *tabName, LOCKMASK *conflictsP, int *prioP, int numModes, int maxBackends);