Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit16974ee

Browse files
committed
Get rid of the former rather baroque mechanism for propagating the values
of ThisStartUpID and RedoRecPtr into new backends. It's a lot easier justto make them all grab the values out of shared memory during startup.This helps to decouple the postmaster from checkpoint execution, which Ineed since I'm intending to let the bgwriter do it instead, and it alsofixes a bug in the Win32 port: ThisStartUpID wasn't getting propagated atall AFAICS. (Doesn't give me a lot of faith in the amount of testing thatport has gotten.)
1 parentbb44a7c commit16974ee

File tree

6 files changed

+38
-59
lines changed

6 files changed

+38
-59
lines changed

‎src/backend/access/heap/heapam.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.167 2004/05/20 15:07:30 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.168 2004/05/27 17:12:37 tgl Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -1902,7 +1902,7 @@ heap_mark4update(Relation relation, HeapTuple tuple, Buffer *buffer,
19021902
* XLOG stuff: no logging is required as long as we have no
19031903
* savepoints. For savepoints private log could be used...
19041904
*/
1905-
((PageHeader)BufferGetPage(*buffer))->pd_sui=ThisStartUpID;
1905+
PageSetSUI(BufferGetPage(*buffer),ThisStartUpID);
19061906

19071907
/* store transaction information of xact marking the tuple */
19081908
tuple->t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED |

‎src/backend/access/transam/xlog.c

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.142 2004/05/21 16:08:46 tgl Exp $
10+
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.143 2004/05/27 17:12:42 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -166,9 +166,10 @@ XLogRecPtrProcLastRecEnd = {0, 0};
166166
* XLogCtl->Insert.RedoRecPtr, whenever we can safely do so (ie, when we
167167
* hold the Insert lock). See XLogInsert for details.We are also allowed
168168
* to update from XLogCtl->Insert.RedoRecPtr if we hold the info_lck;
169-
* see GetRedoRecPtr.
169+
* see GetRedoRecPtr. A freshly spawned backend obtains the value during
170+
* InitXLOGAccess.
170171
*/
171-
NON_EXEC_STATICXLogRecPtrRedoRecPtr;
172+
staticXLogRecPtrRedoRecPtr;
172173

173174
/*----------
174175
* Shared-memory data structures for XLOG control
@@ -280,10 +281,6 @@ typedef struct XLogCtlData
280281
uint32XLogCacheBlck;/* highest allocated xlog buffer index */
281282
StartUpIDThisStartUpID;
282283

283-
/* This value is not protected by *any* lock... */
284-
/* see SetSavedRedoRecPtr/GetSavedRedoRecPtr */
285-
XLogRecPtrSavedRedoRecPtr;
286-
287284
slock_tinfo_lck;/* locks shared LogwrtRqst/LogwrtResult */
288285
}XLogCtlData;
289286

@@ -2893,8 +2890,7 @@ StartupXLOG(void)
28932890
else
28942891
ThisStartUpID=checkPoint.ThisStartUpID;
28952892

2896-
RedoRecPtr=XLogCtl->Insert.RedoRecPtr=
2897-
XLogCtl->SavedRedoRecPtr=checkPoint.redo;
2893+
RedoRecPtr=XLogCtl->Insert.RedoRecPtr=checkPoint.redo;
28982894

28992895
if (XLByteLT(RecPtr,checkPoint.redo))
29002896
ereport(PANIC,
@@ -3251,35 +3247,22 @@ ReadCheckpointRecord(XLogRecPtr RecPtr,
32513247
}
32523248

32533249
/*
3254-
* Postmaster uses this to initialize ThisStartUpID & RedoRecPtr from
3255-
* XLogCtlData located in shmem after successful startup.
3250+
* This must be called during startup of a backend process, except that
3251+
* it need not be called in a standalone backend (which does StartupXLOG
3252+
* instead). We need to initialize the local copies of ThisStartUpID and
3253+
* RedoRecPtr.
3254+
*
3255+
* Note: before Postgres 7.5, we went to some effort to keep the postmaster
3256+
* process's copies of ThisStartUpID and RedoRecPtr valid too. This was
3257+
* unnecessary however, since the postmaster itself never touches XLOG anyway.
32563258
*/
32573259
void
3258-
SetThisStartUpID(void)
3260+
InitXLOGAccess(void)
32593261
{
3262+
/* ThisStartUpID doesn't change so we need no lock to copy it */
32603263
ThisStartUpID=XLogCtl->ThisStartUpID;
3261-
RedoRecPtr=XLogCtl->SavedRedoRecPtr;
3262-
}
3263-
3264-
/*
3265-
* CheckPoint process called by postmaster saves copy of new RedoRecPtr
3266-
* in shmem (using SetSavedRedoRecPtr). When checkpointer completes,
3267-
* postmaster calls GetSavedRedoRecPtr to update its own copy of RedoRecPtr,
3268-
* so that subsequently-spawned backends will start out with a reasonably
3269-
* up-to-date local RedoRecPtr. Since these operations are not protected by
3270-
* any lock and copying an XLogRecPtr isn't atomic, it's unsafe to use either
3271-
* of these routines at other times!
3272-
*/
3273-
void
3274-
SetSavedRedoRecPtr(void)
3275-
{
3276-
XLogCtl->SavedRedoRecPtr=RedoRecPtr;
3277-
}
3278-
3279-
void
3280-
GetSavedRedoRecPtr(void)
3281-
{
3282-
RedoRecPtr=XLogCtl->SavedRedoRecPtr;
3264+
/* Use GetRedoRecPtr to copy the RedoRecPtr safely */
3265+
(void)GetRedoRecPtr();
32833266
}
32843267

32853268
/*

‎src/backend/bootstrap/bootstrap.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.179 2004/05/21 05:07:56 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.180 2004/05/27 17:12:49 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -489,12 +489,12 @@ BootstrapMain(int argc, char *argv[])
489489
break;
490490

491491
caseBS_XLOG_CHECKPOINT:
492+
InitXLOGAccess();
492493
CreateCheckPoint(false, false);
493-
SetSavedRedoRecPtr();/* pass redo ptr back to
494-
* postmaster */
495494
proc_exit(0);/* done */
496495

497496
caseBS_XLOG_BGWRITER:
497+
InitXLOGAccess();
498498
BufferBackgroundWriter();
499499
proc_exit(0);/* done */
500500

@@ -504,6 +504,7 @@ BootstrapMain(int argc, char *argv[])
504504
proc_exit(0);/* done */
505505

506506
caseBS_XLOG_SHUTDOWN:
507+
InitXLOGAccess();
507508
ShutdownXLOG(0,0);
508509
DumpFreeSpaceMap(0,0);
509510
proc_exit(0);/* done */

‎src/backend/postmaster/postmaster.c

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
*
3838
*
3939
* IDENTIFICATION
40-
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.396 2004/05/2715:07:41 momjian Exp $
40+
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.397 2004/05/2717:12:52 tgl Exp $
4141
*
4242
* NOTES
4343
*
@@ -1909,8 +1909,8 @@ reaper(SIGNAL_ARGS)
19091909
* trouble...
19101910
*/
19111911
win32_RemoveChild(pid);
1912-
#endif
1913-
#endif
1912+
#endif/* WIN32 */
1913+
#endif/* HAVE_WAITPID */
19141914

19151915
/*
19161916
* Check if this child was the statistics collector. If so, try to
@@ -1953,14 +1953,9 @@ reaper(SIGNAL_ARGS)
19531953
StartupPID=0;
19541954

19551955
/*
1956-
* Startup succeeded - remember its ID and RedoRecPtr.
1957-
*
1958-
* NB: this MUST happen before we fork a checkpoint or shutdown
1959-
* subprocess, else they will have wrong local ThisStartUpId.
1956+
* Startup succeeded - we are done with system startup or recovery.
19601957
*/
1961-
SetThisStartUpID();
1962-
1963-
FatalError= false;/* done with recovery */
1958+
FatalError= false;
19641959

19651960
/*
19661961
* Arrange for first checkpoint to occur after standard delay.
@@ -2073,8 +2068,6 @@ CleanupProc(int pid,
20732068
if (!FatalError)
20742069
{
20752070
checkpointed=time(NULL);
2076-
/* Update RedoRecPtr for future child backends */
2077-
GetSavedRedoRecPtr();
20782071
}
20792072
}
20802073
elseif (pid==BgWriterPID)
@@ -3287,7 +3280,6 @@ postmaster_error(const char *fmt,...)
32873280
* functions
32883281
*/
32893282
#include"storage/spin.h"
3290-
externXLogRecPtrRedoRecPtr;
32913283
externXLogwrtResultLogwrtResult;
32923284
externslock_t*ShmemLock;
32933285
externslock_t*ShmemIndexLock;
@@ -3351,7 +3343,6 @@ write_backend_variables(Port *port)
33513343
}
33523344
write_var(MyCancelKey,fp);
33533345

3354-
write_var(RedoRecPtr,fp);
33553346
write_var(LogwrtResult,fp);
33563347

33573348
write_var(UsedShmemSegID,fp);
@@ -3416,7 +3407,6 @@ read_backend_variables(unsigned long id, Port *port)
34163407
}
34173408
read_var(MyCancelKey,fp);
34183409

3419-
read_var(RedoRecPtr,fp);
34203410
read_var(LogwrtResult,fp);
34213411

34223412
read_var(UsedShmemSegID,fp);

‎src/backend/utils/init/postinit.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.131 2003/12/12 18:45:09 petere Exp $
11+
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.132 2004/05/27 17:12:54 tgl Exp $
1212
*
1313
*
1414
*-------------------------------------------------------------------------
@@ -325,6 +325,13 @@ InitPostgres(const char *dbname, const char *username)
325325
*/
326326
AmiTransactionOverride(bootstrap);
327327

328+
/*
329+
* Initialize local process's access to XLOG. In bootstrap case
330+
* we may skip this since StartupXLOG() was run instead.
331+
*/
332+
if (!bootstrap)
333+
InitXLOGAccess();
334+
328335
/*
329336
* Initialize the relation descriptor cache. This must create at
330337
* least the minimum set of "nailed-in" cache entries.No catalog

‎src/include/access/xlog.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.49 2004/02/11 22:55:25 tgl Exp $
9+
* $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.50 2004/05/27 17:12:57 tgl Exp $
1010
*/
1111
#ifndefXLOG_H
1212
#defineXLOG_H
@@ -230,11 +230,9 @@ extern void XLOGPathInit(void);
230230
externvoidBootStrapXLOG(void);
231231
externvoidStartupXLOG(void);
232232
externvoidShutdownXLOG(intcode,Datumarg);
233+
externvoidInitXLOGAccess(void);
233234
externvoidCreateCheckPoint(boolshutdown,boolforce);
234-
externvoidSetThisStartUpID(void);
235235
externvoidXLogPutNextOid(OidnextOid);
236-
externvoidSetSavedRedoRecPtr(void);
237-
externvoidGetSavedRedoRecPtr(void);
238236
externXLogRecPtrGetRedoRecPtr(void);
239237

240238
/* in storage/ipc/sinval.c, but don't want to declare in sinval.h because

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp