mirror of https://github.com/citusdata/citus.git
Implement ColumnarOverwriteMetapage
parent
7b9aecff21
commit
9c1ac3127f
|
@ -114,6 +114,8 @@ PhysicalToLogical(PhysicalAddr addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void ColumnarOverwriteMetapage(Relation relation,
|
||||||
|
ColumnarMetapage columnarMetapage);
|
||||||
static ColumnarMetapage ColumnarMetapageRead(Relation rel, bool force);
|
static ColumnarMetapage ColumnarMetapageRead(Relation rel, bool force);
|
||||||
static void ReadFromBlock(Relation rel, BlockNumber blockno, uint32 offset,
|
static void ReadFromBlock(Relation rel, BlockNumber blockno, uint32 offset,
|
||||||
char *buf, uint32 len, bool force);
|
char *buf, uint32 len, bool force);
|
||||||
|
@ -226,9 +228,7 @@ ColumnarStorageUpdateCurrent(Relation rel, bool upgrade, uint64 reservedStripeId
|
||||||
metapage.reservedRowNumber = reservedRowNumber;
|
metapage.reservedRowNumber = reservedRowNumber;
|
||||||
metapage.reservedOffset = reservedOffset;
|
metapage.reservedOffset = reservedOffset;
|
||||||
|
|
||||||
WriteToBlock(rel, COLUMNAR_METAPAGE_BLOCKNO, SizeOfPageHeaderData,
|
ColumnarOverwriteMetapage(rel, metapage);
|
||||||
(char *) &metapage, sizeof(ColumnarMetapage),
|
|
||||||
true /* clear because we are overwriting */);
|
|
||||||
|
|
||||||
UnlockRelationForExtension(rel, ExclusiveLock);
|
UnlockRelationForExtension(rel, ExclusiveLock);
|
||||||
}
|
}
|
||||||
|
@ -362,9 +362,7 @@ ColumnarStorageReserveStripe(Relation rel, uint64 nrows, uint64 *firstRowNumber)
|
||||||
*firstRowNumber = metapage.reservedRowNumber;
|
*firstRowNumber = metapage.reservedRowNumber;
|
||||||
metapage.reservedRowNumber += nrows;
|
metapage.reservedRowNumber += nrows;
|
||||||
|
|
||||||
WriteToBlock(rel, COLUMNAR_METAPAGE_BLOCKNO, SizeOfPageHeaderData,
|
ColumnarOverwriteMetapage(rel, metapage);
|
||||||
(char *) &metapage, sizeof(ColumnarMetapage),
|
|
||||||
true /* clear because we are overwriting */);
|
|
||||||
|
|
||||||
UnlockRelationForExtension(rel, ExclusiveLock);
|
UnlockRelationForExtension(rel, ExclusiveLock);
|
||||||
|
|
||||||
|
@ -392,9 +390,7 @@ ColumnarStorageReserveData(Relation rel, uint64 amount)
|
||||||
metapage.reservedOffset = nextReservation;
|
metapage.reservedOffset = nextReservation;
|
||||||
|
|
||||||
/* write new reservation */
|
/* write new reservation */
|
||||||
WriteToBlock(rel, COLUMNAR_METAPAGE_BLOCKNO, SizeOfPageHeaderData,
|
ColumnarOverwriteMetapage(rel, metapage);
|
||||||
(char *) &metapage, sizeof(ColumnarMetapage),
|
|
||||||
true /* clear because we are overwriting */);
|
|
||||||
|
|
||||||
/* last used PhysicalAddr of new reservation */
|
/* last used PhysicalAddr of new reservation */
|
||||||
PhysicalAddr final = LogicalToPhysical(nextReservation - 1);
|
PhysicalAddr final = LogicalToPhysical(nextReservation - 1);
|
||||||
|
@ -538,9 +534,7 @@ ColumnarStorageTruncate(Relation rel, uint64 newDataReservation)
|
||||||
metapage.reservedOffset = newDataReservation;
|
metapage.reservedOffset = newDataReservation;
|
||||||
|
|
||||||
/* write new reservation */
|
/* write new reservation */
|
||||||
WriteToBlock(rel, COLUMNAR_METAPAGE_BLOCKNO, SizeOfPageHeaderData,
|
ColumnarOverwriteMetapage(rel, metapage);
|
||||||
(char *) &metapage, sizeof(ColumnarMetapage),
|
|
||||||
true /* clear because we are overwriting */);
|
|
||||||
|
|
||||||
UnlockRelationForExtension(rel, ExclusiveLock);
|
UnlockRelationForExtension(rel, ExclusiveLock);
|
||||||
|
|
||||||
|
@ -562,6 +556,20 @@ ColumnarStorageTruncate(Relation rel, uint64 newDataReservation)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ColumnarOverwriteMetapage writes given columnarMetapage back to metapage
|
||||||
|
* for given relation.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
ColumnarOverwriteMetapage(Relation relation, ColumnarMetapage columnarMetapage)
|
||||||
|
{
|
||||||
|
/* clear metapage because we are overwriting */
|
||||||
|
bool clear = true;
|
||||||
|
WriteToBlock(relation, COLUMNAR_METAPAGE_BLOCKNO, SizeOfPageHeaderData,
|
||||||
|
(char *) &columnarMetapage, sizeof(ColumnarMetapage), clear);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ColumnarMetapageRead - read the current contents of the metapage. Error if
|
* ColumnarMetapageRead - read the current contents of the metapage. Error if
|
||||||
* it does not exist. Throw an error if the metapage is not the current
|
* it does not exist. Throw an error if the metapage is not the current
|
||||||
|
|
Loading…
Reference in New Issue