[Groonga-commit] pgroonga/pgroonga at 7362dd2 [master] wal: fix a bug that applied offset is wrong

Back to archive index

Kouhei Sutou null+****@clear*****
Thu Nov 3 12:17:59 JST 2016


Kouhei Sutou	2016-11-03 12:17:59 +0900 (Thu, 03 Nov 2016)

  New Revision: 7362dd2d5473d0476d219447749db04801964bab
  https://github.com/pgroonga/pgroonga/commit/7362dd2d5473d0476d219447749db04801964bab

  Message:
    wal: fix a bug that applied offset is wrong

  Modified files:
    src/pgrn_wal.c

  Modified: src/pgrn_wal.c (+6 -4)
===================================================================
--- src/pgrn_wal.c    2016-11-03 00:06:50 +0900 (dbeb33f)
+++ src/pgrn_wal.c    2016-11-03 12:17:59 +0900 (6e8f349)
@@ -1336,6 +1336,7 @@ PGrnWALApplyConsume(PGrnWALApplyData *data)
 {
 	BlockNumber i;
 	BlockNumber startBlock;
+	OffsetNumber dataOffset;
 	BlockNumber nBlocks;
 	msgpack_unpacker unpacker;
 	msgpack_unpacked unpacked;
@@ -1345,6 +1346,7 @@ PGrnWALApplyConsume(PGrnWALApplyData *data)
 	unpackerBaseOffset = unpacker.off;
 	msgpack_unpacked_init(&unpacked);
 	startBlock = data->current.block;
+	dataOffset = data->current.offset;
 	if (startBlock == PGRN_WAL_META_PAGE_BLOCK_NUMBER)
 		startBlock++;
 	nBlocks = RelationGetNumberOfBlocks(data->index);
@@ -1359,13 +1361,12 @@ PGrnWALApplyConsume(PGrnWALApplyData *data)
 		LockBuffer(buffer, BUFFER_LOCK_SHARE);
 		page = BufferGetPage(buffer);
 		pageSpecial = (PGrnWALPageSpecial *)PageGetSpecialPointer(page);
-		dataSize = pageSpecial->current - data->current.offset;
+		dataSize = pageSpecial->current - dataOffset;
 		msgpack_unpacker_reserve_buffer(&unpacker, dataSize);
 		memcpy(msgpack_unpacker_buffer(&unpacker),
-			   pageSpecial->data + data->current.offset,
+			   pageSpecial->data + dataOffset,
 			   dataSize);
 		UnlockReleaseBuffer(buffer);
-		data->current.offset = 0;
 
 		msgpack_unpacker_buffer_consumed(&unpacker, dataSize);
 		while (msgpack_unpacker_next(&unpacker, &unpacked) ==
@@ -1374,11 +1375,12 @@ PGrnWALApplyConsume(PGrnWALApplyData *data)
 			OffsetNumber appliedOffset;
 
 			PGrnWALApplyObject(data, &unpacked.data);
-			appliedOffset = unpacker.off - unpackerBaseOffset;
+			appliedOffset = dataOffset + unpacker.off - unpackerBaseOffset;
 			PGrnIndexStatusSetWALAppliedPosition(data->index,
 												 i,
 												 appliedOffset);
 		}
+		dataOffset = 0;
 	}
 	msgpack_unpacked_destroy(&unpacked);
 	msgpack_unpacker_destroy(&unpacker);
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index