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

Commit8dc92cf

Browse files
author
Artur Zakirov
committed
dirty XLog fixes
1 parentd7d92b4 commit8dc92cf

File tree

4 files changed

+47
-46
lines changed

4 files changed

+47
-46
lines changed

‎rum.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ extern bytea *rumoptions(Datum reloptions, bool validate);
506506
externDatumrumhandler(PG_FUNCTION_ARGS);
507507
externvoidinitRumState(RumState*state,Relationindex);
508508
externBufferRumNewBuffer(Relationindex);
509-
externvoidRumInitBuffer(Relationindex,Bufferbuffer,uint32flags);
509+
externvoidRumInitBuffer(Bufferbuffer,uint32flags);
510510
externvoidRumInitPage(Pagepage,uint32f,SizepageSize);
511511
externvoidRumInitMetabuffer(Relationindex,BuffermetaBuffer);
512512
externintrumCompareEntries(RumState*rumstate,OffsetNumberattnum,

‎rumfast.c

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,27 @@ typedef struct KeyArray
4646
* Returns amount of free space left on the page.
4747
*/
4848
staticint32
49-
writeListPage(Relationindex,Bufferbuffer,
49+
writeListPage(Relationindex,Bufferbuffer,GenericXLogState*state,
5050
IndexTuple*tuples,int32ntuples,BlockNumberrightlink)
5151
{
52-
Pagepage=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
52+
Pagepage;
5353
int32i,
5454
freesize,
5555
size=0;
5656
OffsetNumberl,
5757
off;
5858
char*workspace;
5959
char*ptr;
60+
GenericXLogState*state2;
6061

62+
state2=GenericXLogStart(index);
6163
/* workspace could be a local array; we use palloc for alignment */
6264
workspace=palloc(BLCKSZ);
6365

6466
START_CRIT_SECTION();
6567

66-
RumInitBuffer(index,buffer,RUM_LIST);
68+
RumInitBuffer(buffer,RUM_LIST);
69+
page=GenericXLogRegisterBuffer(state2,buffer,0);
6770

6871
off=FirstOffsetNumber;
6972
ptr=workspace;
@@ -104,7 +107,8 @@ writeListPage(Relation index, Buffer buffer,
104107
RumPageGetOpaque(page)->maxoff=0;
105108
}
106109

107-
MarkBufferDirty(buffer);
110+
// MarkBufferDirty(buffer);
111+
GenericXLogFinish(state2);
108112

109113
/* get free space before releasing buffer */
110114
freesize=PageGetExactFreeSpace(page);
@@ -119,8 +123,8 @@ writeListPage(Relation index, Buffer buffer,
119123
}
120124

121125
staticvoid
122-
makeSublist(Relationindex,IndexTuple*tuples,int32ntuples,
123-
RumMetaPageData*res)
126+
makeSublist(Relationindex,GenericXLogState*state,
127+
IndexTuple*tuples,int32ntuples,RumMetaPageData*res)
124128
{
125129
BuffercurBuffer=InvalidBuffer;
126130
BufferprevBuffer=InvalidBuffer;
@@ -143,7 +147,7 @@ makeSublist(Relation index, IndexTuple *tuples, int32 ntuples,
143147
if (prevBuffer!=InvalidBuffer)
144148
{
145149
res->nPendingPages++;
146-
writeListPage(index,prevBuffer,
150+
writeListPage(index,prevBuffer,state,
147151
tuples+startTuple,
148152
i-startTuple,
149153
BufferGetBlockNumber(curBuffer));
@@ -176,7 +180,7 @@ makeSublist(Relation index, IndexTuple *tuples, int32 ntuples,
176180
* Write last page
177181
*/
178182
res->tail=BufferGetBlockNumber(curBuffer);
179-
res->tailFreeSize=writeListPage(index,curBuffer,
183+
res->tailFreeSize=writeListPage(index,curBuffer,state,
180184
tuples+startTuple,
181185
ntuples-startTuple,
182186
InvalidBlockNumber);
@@ -199,7 +203,7 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
199203
Buffermetabuffer;
200204
Pagemetapage;
201205
RumMetaPageData*metadata=NULL;
202-
RumXLogRecDatardata[2];
206+
//RumXLogRecData rdata[2];
203207
Bufferbuffer=InvalidBuffer;
204208
Pagepage=NULL;
205209
rumxlogUpdateMetadata;
@@ -214,10 +218,10 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
214218
data.ntuples=0;
215219
data.newRightlink=data.prevTail=InvalidBlockNumber;
216220

217-
rdata[0].buffer=InvalidBuffer;
218-
rdata[0].data= (char*)&data;
219-
rdata[0].len=sizeof(rumxlogUpdateMeta);
220-
rdata[0].next=NULL;
221+
//rdata[0].buffer = InvalidBuffer;
222+
//rdata[0].data = (char *) &data;
223+
//rdata[0].len = sizeof(rumxlogUpdateMeta);
224+
//rdata[0].next = NULL;
221225

222226
state=GenericXLogStart(rumstate->index);
223227
metabuffer=ReadBuffer(index,RUM_METAPAGE_BLKNO);
@@ -257,7 +261,8 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
257261
RumMetaPageDatasublist;
258262

259263
memset(&sublist,0,sizeof(RumMetaPageData));
260-
makeSublist(index,collector->tuples,collector->ntuples,&sublist);
264+
makeSublist(index,state,
265+
collector->tuples,collector->ntuples,&sublist);
261266

262267
/*
263268
* metapage was unlocked, see above
@@ -291,21 +296,21 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
291296
LockBuffer(buffer,RUM_EXCLUSIVE);
292297
page=GenericXLogRegisterBuffer(state,buffer,0);
293298

294-
rdata[0].next=rdata+1;
295-
296-
rdata[1].buffer=buffer;
297-
rdata[1].buffer_std= true;
298-
rdata[1].data=NULL;
299-
rdata[1].len=0;
300-
rdata[1].next=NULL;
299+
//rdata[0].next = rdata + 1;
300+
//
301+
//rdata[1].buffer = buffer;
302+
//rdata[1].buffer_std = true;
303+
//rdata[1].data = NULL;
304+
//rdata[1].len = 0;
305+
//rdata[1].next = NULL;
301306

302307
Assert(RumPageGetOpaque(page)->rightlink==InvalidBlockNumber);
303308

304309
START_CRIT_SECTION();
305310

306311
RumPageGetOpaque(page)->rightlink=sublist.head;
307312

308-
MarkBufferDirty(buffer);
313+
//MarkBufferDirty(buffer);
309314

310315
metadata->tail=sublist.tail;
311316
metadata->tailFreeSize=sublist.tailFreeSize;
@@ -332,13 +337,13 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
332337
off= (PageIsEmpty(page)) ?FirstOffsetNumber :
333338
OffsetNumberNext(PageGetMaxOffsetNumber(page));
334339

335-
rdata[0].next=rdata+1;
336-
337-
rdata[1].buffer=buffer;
338-
rdata[1].buffer_std= true;
339-
ptr=rdata[1].data= (char*)palloc(collector->sumsize);
340-
rdata[1].len=collector->sumsize;
341-
rdata[1].next=NULL;
340+
//rdata[0].next = rdata + 1;
341+
//
342+
//rdata[1].buffer = buffer;
343+
//rdata[1].buffer_std = true;
344+
ptr/*= rdata[1].data*/= (char*)palloc(collector->sumsize);
345+
//rdata[1].len = collector->sumsize;
346+
//rdata[1].next = NULL;
342347

343348
data.ntuples=collector->ntuples;
344349

@@ -357,26 +362,29 @@ rumHeapTupleFastInsert(RumState *rumstate, RumTupleCollector *collector)
357362
l=PageAddItem(page, (Item)collector->tuples[i],tupsize,off, false, false);
358363

359364
if (l==InvalidOffsetNumber)
365+
{
366+
GenericXLogAbort(state);
360367
elog(ERROR,"failed to add item to index page in \"%s\"",
361368
RelationGetRelationName(index));
369+
}
362370

363371
memcpy(ptr,collector->tuples[i],tupsize);
364372
ptr+=tupsize;
365373

366374
off++;
367375
}
368376

369-
Assert((ptr-rdata[1].data) <=collector->sumsize);
377+
//Assert((ptr - rdata[1].data) <= collector->sumsize);
370378

371379
metadata->tailFreeSize=PageGetExactFreeSpace(page);
372380

373-
MarkBufferDirty(buffer);
381+
//MarkBufferDirty(buffer);
374382
}
375383

376384
/*
377385
* Write metabuffer, make xlog entry
378386
*/
379-
MarkBufferDirty(metabuffer);
387+
//MarkBufferDirty(metabuffer);
380388

381389
GenericXLogFinish(state);
382390

‎ruminsert.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ createPostingTree(RumState *rumstate, OffsetNumber attnum, Relation index,
5858

5959
START_CRIT_SECTION();
6060

61-
RumInitBuffer(index,buffer,RUM_DATA |RUM_LEAF);
61+
RumInitBuffer(buffer,RUM_DATA |RUM_LEAF);
6262
page=BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST);
6363
blkno=BufferGetBlockNumber(buffer);
6464

@@ -615,7 +615,7 @@ rumbuild(Relation heap, Relation index, struct IndexInfo *indexInfo)
615615
RootBuffer=RumNewBuffer(index);
616616

617617
RumInitMetabuffer(index,MetaBuffer);
618-
RumInitBuffer(index,RootBuffer,RUM_LEAF);
618+
RumInitBuffer(RootBuffer,RUM_LEAF);
619619

620620
UnlockReleaseBuffer(MetaBuffer);
621621
UnlockReleaseBuffer(RootBuffer);
@@ -713,7 +713,7 @@ rumbuildempty(Relation index)
713713
/* Initialize and xlog metabuffer and root buffer. */
714714
RumInitMetabuffer(index,MetaBuffer);
715715

716-
RumInitBuffer(index,RootBuffer,RUM_LEAF);
716+
RumInitBuffer(RootBuffer,RUM_LEAF);
717717

718718
/* Unlock and release the buffers. */
719719
UnlockReleaseBuffer(MetaBuffer);

‎rumutil.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -389,17 +389,10 @@ RumInitPage(Page page, uint32 f, Size pageSize)
389389
}
390390

391391
void
392-
RumInitBuffer(Relationindex,Bufferbuffer,uint32flags)
392+
RumInitBuffer(Bufferbuffer,uint32flags)
393393
{
394-
Pagepage;
395-
GenericXLogState*state;
396-
397-
state=GenericXLogStart(index);
398-
page=GenericXLogRegisterBuffer(state,buffer,GENERIC_XLOG_FULL_IMAGE);
399-
400-
RumInitPage(page,flags,BufferGetPageSize(buffer));
401-
402-
GenericXLogFinish(state);
394+
RumInitPage(BufferGetPage(buffer,NULL,NULL,BGP_NO_SNAPSHOT_TEST),
395+
flags,BufferGetPageSize(buffer));
403396
}
404397

405398
void

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp