Kouhei Sutou
null+****@clear*****
Sat Oct 29 00:58:39 JST 2016
Kouhei Sutou 2016-10-29 00:58:39 +0900 (Sat, 29 Oct 2016) New Revision: e83b78a4cc602949a6b23b88df1db28b9e76106b https://github.com/pgroonga/pgroonga/commit/e83b78a4cc602949a6b23b88df1db28b9e76106b Message: wal: simplify meta page special Modified files: src/pgrn_wal.c Modified: src/pgrn_wal.c (+19 -23) =================================================================== --- src/pgrn_wal.c 2016-10-29 00:52:57 +0900 (c39412f) +++ src/pgrn_wal.c 2016-10-29 00:58:39 +0900 (8c51d01) @@ -50,9 +50,9 @@ typedef enum { } PGrnWALAction; typedef struct { - BlockNumber start; - BlockNumber current; - BlockNumber end; + BlockNumber next; + BlockNumber max; /* TODO */ + uint8_t version; } PGrnWALMetaPageSpecial; #define PGRN_PAGE_DATA_SIZE \ @@ -198,28 +198,25 @@ PGrnWALDataInitMeta(PGrnWALData *data) data->meta.buffer = ReadBuffer(data->index, P_NEW); LockBuffer(data->meta.buffer, BUFFER_LOCK_EXCLUSIVE); UnlockRelationForExtension(data->index, ExclusiveLock); - } - else - { - data->meta.buffer = ReadBuffer(data->index, - PGRN_WAL_META_PAGE_BLOCK_NUMBER); - LockBuffer(data->meta.buffer, BUFFER_LOCK_EXCLUSIVE); - } - data->meta.page = GenericXLogRegisterBuffer(data->state, - data->meta.buffer, - GENERIC_XLOG_FULL_IMAGE); - if (PageIsNew(data->meta.page)) - { + data->meta.page = GenericXLogRegisterBuffer(data->state, + data->meta.buffer, + GENERIC_XLOG_FULL_IMAGE); PageInit(data->meta.page, BLCKSZ, sizeof(PGrnWALMetaPageSpecial)); data->meta.pageSpecial = (PGrnWALMetaPageSpecial *)PageGetSpecialPointer(data->meta.page); - data->meta.pageSpecial->start = PGRN_WAL_META_PAGE_BLOCK_NUMBER + 1; - data->meta.pageSpecial->current = data->meta.pageSpecial->start; - data->meta.pageSpecial->end = data->meta.pageSpecial->start; + data->meta.pageSpecial->next = PGRN_WAL_META_PAGE_BLOCK_NUMBER + 1; + data->meta.pageSpecial->max = 0; } else { + data->meta.buffer = ReadBuffer(data->index, + PGRN_WAL_META_PAGE_BLOCK_NUMBER); + LockBuffer(data->meta.buffer, BUFFER_LOCK_EXCLUSIVE); + + data->meta.page = GenericXLogRegisterBuffer(data->state, + data->meta.buffer, + 0); data->meta.pageSpecial = (PGrnWALMetaPageSpecial *)PageGetSpecialPointer(data->meta.page); } @@ -246,21 +243,20 @@ PGrnWALPageWriter(void *userData, if (BufferIsInvalid(data->current.buffer)) { if (RelationGetNumberOfBlocks(data->index) <= - data->meta.pageSpecial->current) + data->meta.pageSpecial->next) { LockRelationForExtension(data->index, ExclusiveLock); data->current.buffer = ReadBuffer(data->index, P_NEW); LockBuffer(data->current.buffer, BUFFER_LOCK_EXCLUSIVE); UnlockRelationForExtension(data->index, ExclusiveLock); - data->meta.pageSpecial->current = + data->meta.pageSpecial->next = BufferGetBlockNumber(data->current.buffer); - data->meta.pageSpecial->end = data->meta.pageSpecial->current; } else { data->current.buffer = - ReadBuffer(data->index, data->meta.pageSpecial->current); + ReadBuffer(data->index, data->meta.pageSpecial->next); LockBuffer(data->current.buffer, BUFFER_LOCK_EXCLUSIVE); } } @@ -318,7 +314,7 @@ PGrnWALPageWriter(void *userData, data->current.page = NULL; UnlockReleaseBuffer(data->current.buffer); data->current.buffer = InvalidBuffer; - data->meta.pageSpecial->current++; + data->meta.pageSpecial->next++; } } -------------- next part -------------- HTML����������������������������...Download