Re: xlog.c: WALInsertLock vs. WALWriteLock
От | Robert Haas |
---|---|
Тема | Re: xlog.c: WALInsertLock vs. WALWriteLock |
Дата | |
Msg-id | AANLkTik9dDqyroesEZcSqGaQ750kzFuwcD7mmLkV4tcW@mail.gmail.com обсуждение исходный текст |
Ответ на | xlog.c: WALInsertLock vs. WALWriteLock (fazool mein <fazoolmein@gmail.com>) |
Ответы |
Re: xlog.c: WALInsertLock vs. WALWriteLock
|
Список | pgsql-hackers |
On Fri, Oct 22, 2010 at 3:08 PM, fazool mein <fazoolmein@gmail.com> wrote: > I'm writing a function that will read data from the buffer in xlog (i.e. > from XLogCtl->pages and XLogCtl->xlblocks). I want to make sure that I am > doing it correctly. > For reading from the buffer, do I need to lock WALInsertLock or > WALWriteLock? Also, can you explain a bit the usage of 'LW_SHARED'. Can we > use it for read purposes? Holding WALInsertLock in shared mode prevents other processes from inserting WAL, or in other words it keeps the "end" position from moving, while holding WALWriteLock in shared mode prevents other processes from writing the WAL from the buffers out to the operating system, or in other words it keeps the "start" position from moving. So you could probably take WALInsertLock in shared mode, figure out the current end of WAL position, release the lock; then take WALWriteLock in shared mode, read any WAL before the end of WAL position, and release the lock. But note that this wouldn't guarantee that you read all WAL as it's generated.... -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
В списке pgsql-hackers по дате отправления: