Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions contrib/amcheck/expected/check_heap.out
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,11 @@ INSERT INTO heaptest (a, b)
(SELECT gs, repeat('x', gs)
FROM generate_series(1,50) gs);
-- pg_stat_io test:
-- verify_heapam always uses a BAS_BULKREAD BufferAccessStrategy, whereas a
-- sequential scan does so only if the table is large enough when compared to
-- shared buffers (see initscan()). CREATE DATABASE ... also unconditionally
-- uses a BAS_BULKREAD strategy, but we have chosen to use a tablespace and
-- verify_heapam to provide coverage instead of adding another expensive
-- verify_heapam reads the heap through the buffer manager; with the
-- cooling-stage clock sweep there are no per-strategy IO contexts, so the
-- reads are counted in the 'normal' context. CREATE DATABASE ... likewise
-- reads through the normal context, but we have chosen to use a tablespace
-- and verify_heapam to provide coverage instead of adding another expensive
-- operation to the main regression test suite.
--
-- Create an alternative tablespace and move the heaptest table to it, causing
Expand All @@ -83,7 +83,7 @@ INSERT INTO heaptest (a, b)
SET allow_in_place_tablespaces = true;
CREATE TABLESPACE regress_test_stats_tblspc LOCATION '';
SELECT sum(reads) AS stats_bulkreads_before
FROM pg_stat_io WHERE context = 'bulkread' \gset
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset
BEGIN;
ALTER TABLE heaptest SET TABLESPACE regress_test_stats_tblspc;
-- Check that valid options are not rejected nor corruption reported
Expand Down Expand Up @@ -111,15 +111,15 @@ SELECT * FROM verify_heapam(relation := 'heaptest', startblock := 0, endblock :=
COMMIT;
-- verify_heapam should have read in the page written out by
-- ALTER TABLE ... SET TABLESPACE ...
-- causing an additional bulkread, which should be reflected in pg_stat_io.
-- causing additional reads, which should be reflected in pg_stat_io.
SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
--------------------------

(1 row)

SELECT sum(reads) AS stats_bulkreads_after
FROM pg_stat_io WHERE context = 'bulkread' \gset
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset
SELECT :stats_bulkreads_after > :stats_bulkreads_before;
?column?
----------
Expand Down
16 changes: 8 additions & 8 deletions contrib/amcheck/sql/check_heap.sql
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ INSERT INTO heaptest (a, b)
FROM generate_series(1,50) gs);

-- pg_stat_io test:
-- verify_heapam always uses a BAS_BULKREAD BufferAccessStrategy, whereas a
-- sequential scan does so only if the table is large enough when compared to
-- shared buffers (see initscan()). CREATE DATABASE ... also unconditionally
-- uses a BAS_BULKREAD strategy, but we have chosen to use a tablespace and
-- verify_heapam to provide coverage instead of adding another expensive
-- verify_heapam reads the heap through the buffer manager; with the
-- cooling-stage clock sweep there are no per-strategy IO contexts, so the
-- reads are counted in the 'normal' context. CREATE DATABASE ... likewise
-- reads through the normal context, but we have chosen to use a tablespace
-- and verify_heapam to provide coverage instead of adding another expensive
-- operation to the main regression test suite.
--
-- Create an alternative tablespace and move the heaptest table to it, causing
Expand All @@ -43,7 +43,7 @@ INSERT INTO heaptest (a, b)
SET allow_in_place_tablespaces = true;
CREATE TABLESPACE regress_test_stats_tblspc LOCATION '';
SELECT sum(reads) AS stats_bulkreads_before
FROM pg_stat_io WHERE context = 'bulkread' \gset
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset
Comment on lines 45 to +46

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The \gset variables are still named stats_bulkreads_before/stats_bulkreads_after, but this query now deliberately measures the normal context (the comment above was rewritten to say the reads are no longer bulkreads). The names now contradict what they hold. Since these exact lines are already being touched, rename them to reflect the new semantics (e.g. stats_normal_reads_before) for both \gset sites and the comparison on the following line. This also requires the matching update in contrib/amcheck/expected/check_heap.out.

Suggested change
SELECT sum(reads) AS stats_bulkreads_before
FROM pg_stat_io WHERE context = 'bulkread' \gset
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset
SELECT sum(reads) AS stats_normal_reads_before
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset

Comment on lines 45 to +46

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The \gset variable is still named stats_bulkreads_before (and stats_bulkreads_after below), but this change is specifically about the fact that there is no longer a bulkread context -- reads are now counted in the 'normal' context. The names now contradict both the updated comment ("additional reads") and the query (context = 'normal'). Rename to something like stats_reads_before / stats_reads_after so the identifiers match current behavior. (low confidence / low severity)

Suggested change
SELECT sum(reads) AS stats_bulkreads_before
FROM pg_stat_io WHERE context = 'bulkread' \gset
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset
SELECT sum(reads) AS stats_reads_before
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset

BEGIN;
ALTER TABLE heaptest SET TABLESPACE regress_test_stats_tblspc;
-- Check that valid options are not rejected nor corruption reported
Expand All @@ -56,10 +56,10 @@ COMMIT;

-- verify_heapam should have read in the page written out by
-- ALTER TABLE ... SET TABLESPACE ...
-- causing an additional bulkread, which should be reflected in pg_stat_io.
-- causing additional reads, which should be reflected in pg_stat_io.
SELECT pg_stat_force_next_flush();
SELECT sum(reads) AS stats_bulkreads_after
FROM pg_stat_io WHERE context = 'bulkread' \gset
FROM pg_stat_io WHERE context = 'normal' AND object = 'relation' \gset
SELECT :stats_bulkreads_after > :stats_bulkreads_before;

CREATE ROLE regress_heaptest_role;
Expand Down
18 changes: 6 additions & 12 deletions contrib/amcheck/verify_gin.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ static void gin_check_parent_keys_consistency(Relation rel,
static void check_index_page(Relation rel, Buffer buffer, BlockNumber blockNo);
static IndexTuple gin_refind_parent(Relation rel,
BlockNumber parentblkno,
BlockNumber childblkno,
BufferAccessStrategy strategy);
BlockNumber childblkno);
static ItemId PageGetItemIdCareful(Relation rel, BlockNumber block, Page page,
OffsetNumber offset);

Expand Down Expand Up @@ -133,7 +132,6 @@ ginReadTupleWithoutState(IndexTuple itup, int *nitems)
static void
gin_check_posting_tree_parent_keys_consistency(Relation rel, BlockNumber posting_tree_root)
{
BufferAccessStrategy strategy = GetAccessStrategy(BAS_BULKREAD);
GinPostingTreeScanItem *stack;
MemoryContext mctx;
MemoryContext oldcontext;
Expand Down Expand Up @@ -171,8 +169,7 @@ gin_check_posting_tree_parent_keys_consistency(Relation rel, BlockNumber posting

CHECK_FOR_INTERRUPTS();

buffer = ReadBufferExtended(rel, MAIN_FORKNUM, stack->blkno,
RBM_NORMAL, strategy);
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, stack->blkno, RBM_NORMAL);
LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer);

Expand Down Expand Up @@ -391,7 +388,6 @@ gin_check_parent_keys_consistency(Relation rel,
void *callback_state,
bool readonly)
{
BufferAccessStrategy strategy = GetAccessStrategy(BAS_BULKREAD);
GinScanItem *stack;
MemoryContext mctx;
MemoryContext oldcontext;
Expand Down Expand Up @@ -430,8 +426,7 @@ gin_check_parent_keys_consistency(Relation rel,

CHECK_FOR_INTERRUPTS();

buffer = ReadBufferExtended(rel, MAIN_FORKNUM, stack->blkno,
RBM_NORMAL, strategy);
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, stack->blkno, RBM_NORMAL);
LockBuffer(buffer, GIN_SHARE);
page = BufferGetPage(buffer);
maxoff = PageGetMaxOffsetNumber(page);
Expand Down Expand Up @@ -567,7 +562,7 @@ gin_check_parent_keys_consistency(Relation rel,
*/
pfree(stack->parenttup);
stack->parenttup = gin_refind_parent(rel, stack->parentblk,
stack->blkno, strategy);
stack->blkno);

/* We found it - make a final check before failing */
if (!stack->parenttup)
Expand Down Expand Up @@ -719,16 +714,15 @@ check_index_page(Relation rel, Buffer buffer, BlockNumber blockNo)
*/
static IndexTuple
gin_refind_parent(Relation rel, BlockNumber parentblkno,
BlockNumber childblkno, BufferAccessStrategy strategy)
BlockNumber childblkno)
{
Buffer parentbuf;
Page parentpage;
OffsetNumber o,
parent_maxoff;
IndexTuple result = NULL;

parentbuf = ReadBufferExtended(rel, MAIN_FORKNUM, parentblkno, RBM_NORMAL,
strategy);
parentbuf = ReadBufferExtended(rel, MAIN_FORKNUM, parentblkno, RBM_NORMAL);

LockBuffer(parentbuf, GIN_SHARE);
parentpage = BufferGetPage(parentbuf);
Expand Down
3 changes: 0 additions & 3 deletions contrib/amcheck/verify_heapam.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,6 @@ typedef struct HeapCheckContext
* recent block in the buffer yielded by the read stream API.
*/
BlockNumber blkno;
BufferAccessStrategy bstrategy;
Buffer buffer;
Page page;

Expand Down Expand Up @@ -374,7 +373,6 @@ verify_heapam(PG_FUNCTION_ARGS)
PG_RETURN_NULL();
}

ctx.bstrategy = GetAccessStrategy(BAS_BULKREAD);
ctx.buffer = InvalidBuffer;
ctx.page = NULL;

Expand Down Expand Up @@ -472,7 +470,6 @@ verify_heapam(PG_FUNCTION_ARGS)
}

stream = read_stream_begin_relation(stream_flags,
ctx.bstrategy,
ctx.rel,
MAIN_FORKNUM,
stream_cb,
Expand Down
11 changes: 3 additions & 8 deletions contrib/amcheck/verify_nbtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,6 @@ typedef struct BtreeCheckState
bool checkunique;
/* Per-page context */
MemoryContext targetcontext;
/* Buffer access strategy */
BufferAccessStrategy checkstrategy;

/*
* Info for uniqueness checking. Fill this field and the one below once
Expand Down Expand Up @@ -490,7 +488,6 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace,
state->targetcontext = AllocSetContextCreate(CurrentMemoryContext,
"amcheck context",
ALLOCSET_DEFAULT_SIZES);
state->checkstrategy = GetAccessStrategy(BAS_BULKREAD);

/* Get true root block from meta-page */
metapage = palloc_btree_page(state, BTREE_METAPAGE);
Expand Down Expand Up @@ -1115,7 +1112,7 @@ bt_recheck_sibling_links(BtreeCheckState *state,

/* Couple locks in the usual order for nbtree: Left to right */
lbuf = ReadBufferExtended(state->rel, MAIN_FORKNUM, leftcurrent,
RBM_NORMAL, state->checkstrategy);
RBM_NORMAL);
LockBuffer(lbuf, BT_READ);
_bt_checkpage(state->rel, lbuf);
page = BufferGetPage(lbuf);
Expand All @@ -1138,8 +1135,7 @@ bt_recheck_sibling_links(BtreeCheckState *state,
if (newtargetblock != leftcurrent)
{
newtargetbuf = ReadBufferExtended(state->rel, MAIN_FORKNUM,
newtargetblock, RBM_NORMAL,
state->checkstrategy);
newtargetblock, RBM_NORMAL);
LockBuffer(newtargetbuf, BT_READ);
_bt_checkpage(state->rel, newtargetbuf);
page = BufferGetPage(newtargetbuf);
Expand Down Expand Up @@ -3300,8 +3296,7 @@ palloc_btree_page(BtreeCheckState *state, BlockNumber blocknum)
* We copy the page into local storage to avoid holding pin on the buffer
* longer than we must.
*/
buffer = ReadBufferExtended(state->rel, MAIN_FORKNUM, blocknum, RBM_NORMAL,
state->checkstrategy);
buffer = ReadBufferExtended(state->rel, MAIN_FORKNUM, blocknum, RBM_NORMAL);
LockBuffer(buffer, BT_READ);

/*
Expand Down
8 changes: 0 additions & 8 deletions contrib/bloom/blscan.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ blgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
BlockNumber blkno,
npages;
int i;
BufferAccessStrategy bas;
BloomScanOpaque so = (BloomScanOpaque) scan->opaque;
BlockRangeReadStreamPrivate p;
ReadStream *stream;
Expand Down Expand Up @@ -113,11 +112,6 @@ blgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
}
}

/*
* We're going to read the whole index. This is why we use appropriate
* buffer access strategy.
*/
bas = GetAccessStrategy(BAS_BULKREAD);
npages = RelationGetNumberOfBlocks(scan->indexRelation);
pgstat_count_index_scan(scan->indexRelation);
if (scan->instrument)
Expand All @@ -133,7 +127,6 @@ blgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
*/
stream = read_stream_begin_relation(READ_STREAM_FULL |
READ_STREAM_USE_BATCHING,
bas,
scan->indexRelation,
MAIN_FORKNUM,
block_range_read_stream_cb,
Expand Down Expand Up @@ -184,7 +177,6 @@ blgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)

Assert(read_stream_next_buffer(stream, NULL) == InvalidBuffer);
read_stream_end(stream);
FreeAccessStrategy(bas);

return ntids;
}
4 changes: 2 additions & 2 deletions contrib/bloom/blutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ BloomNewBuffer(Relation index)
}

/* Must extend the file */
buffer = ExtendBufferedRel(BMR_REL(index), MAIN_FORKNUM, NULL,
buffer = ExtendBufferedRel(BMR_REL(index), MAIN_FORKNUM,
EB_LOCK_FIRST);

return buffer;
Expand Down Expand Up @@ -460,7 +460,7 @@ BloomInitMetapage(Relation index, ForkNumber forknum)
* block number 0 (BLOOM_METAPAGE_BLKNO). No need to hold the extension
* lock because there cannot be concurrent inserters yet.
*/
metaBuffer = ReadBufferExtended(index, forknum, P_NEW, RBM_NORMAL, NULL);
metaBuffer = ReadBufferExtended(index, forknum, P_NEW, RBM_NORMAL);
LockBuffer(metaBuffer, BUFFER_LOCK_EXCLUSIVE);
Assert(BufferGetBlockNumber(metaBuffer) == BLOOM_METAPAGE_BLKNO);

Expand Down
2 changes: 0 additions & 2 deletions contrib/bloom/blvacuum.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE |
READ_STREAM_FULL |
READ_STREAM_USE_BATCHING,
info->strategy,
index,
MAIN_FORKNUM,
block_range_read_stream_cb,
Expand Down Expand Up @@ -219,7 +218,6 @@ blvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE |
READ_STREAM_FULL |
READ_STREAM_USE_BATCHING,
info->strategy,
index,
MAIN_FORKNUM,
block_range_read_stream_cb,
Expand Down
2 changes: 1 addition & 1 deletion contrib/pageinspect/rawpage.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ get_raw_page_internal(text *relname, ForkNumber forknum, BlockNumber blkno)

/* Take a verbatim copy of the page */

buf = ReadBufferExtended(rel, forknum, blkno, RBM_NORMAL, NULL);
buf = ReadBufferExtended(rel, forknum, blkno, RBM_NORMAL);
LockBuffer(buf, BUFFER_LOCK_SHARE);

memcpy(raw_page_data, BufferGetPage(buf), BLCKSZ);
Expand Down
6 changes: 3 additions & 3 deletions contrib/pg_buffercache/pg_buffercache_pages.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ pg_buffercache_pages(PG_FUNCTION_ARGS)
reldatabase = bufHdr->tag.dbOid;
forknum = BufTagGetForkNum(&bufHdr->tag);
blocknum = bufHdr->tag.blockNum;
usagecount = BUF_STATE_GET_USAGECOUNT(buf_state);
usagecount = BUF_STATE_GET_COOLSTATE(buf_state);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This silently changes the user-visible semantics of the pg_buffercache.usagecount column. BUF_STATE_GET_USAGECOUNT returned the full clock-sweep count (0..BM_MAX_USAGE_COUNT, historically 0..5), whereas BUF_STATE_GET_COOLSTATE returns only bit 0 (0=COOL, 1=HOT). The column is still declared smallint and documented as "Clock-sweep access count", so users querying usagecount will now silently get only 0/1 with no doc or column-name update. This is a backward-incompatible behavior change that needs the documentation (pgbuffercache.sgml) updated and, arguably, the column renamed to reflect HOT/COOL semantics. (high confidence)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change alters the user-visible semantics of the usage_count column exposed by all three functions (pg_buffercache_pages, pg_buffercache_summary, pg_buffercache_usage_counts). BUF_STATE_GET_USAGECOUNT returned the full 0..N usage count, whereas BUF_STATE_GET_COOLSTATE returns only the 0/1 cooling state (bit 0 of the field). The documentation in doc/src/sgml/pgbuffercache.sgml still describes and shows a multi-valued "usage count" (e.g. the sample output table and the column descriptions "A possible buffer usage count"), and is not updated in this change. A user-visible SQL-interface change without matching docs is incomplete for a pgsql-hackers patch. Update pgbuffercache.sgml to reflect the new HOT/COOL cooling-state semantics (and consider whether the exposed column/variable naming should still be usage_count). (high confidence)

pinning_backends = BUF_STATE_GET_REFCOUNT(buf_state);

if (buf_state & BM_DIRTY)
Expand Down Expand Up @@ -605,7 +605,7 @@ pg_buffercache_summary(PG_FUNCTION_ARGS)
if (buf_state & BM_VALID)
{
buffers_used++;
usagecount_total += BUF_STATE_GET_USAGECOUNT(buf_state);
usagecount_total += BUF_STATE_GET_COOLSTATE(buf_state);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

usagecount_total now accumulates only 0/1 per buffer instead of 0..BM_MAX_USAGE_COUNT, so the derived usagecount_avg column changes range/meaning without any doc update. The SGML still labels it a clock-sweep average. Update the documentation to match the new HOT/COOL semantics. (high confidence)


if (buf_state & BM_DIRTY)
buffers_dirty++;
Expand Down Expand Up @@ -655,7 +655,7 @@ pg_buffercache_usage_counts(PG_FUNCTION_ARGS)

CHECK_FOR_INTERRUPTS();

usage_count = BUF_STATE_GET_USAGECOUNT(buf_state);
usage_count = BUF_STATE_GET_COOLSTATE(buf_state);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pg_buffercache_usage_counts() now buckets buffers only into indices 0 and 1 (COOL/HOT); the usage_count output column will never exceed 1. This is fine for array bounds since BM_MAX_USAGE_COUNT is redefined to BUF_COOLSTATE_HOT (=1), but the SQL column name usage_count and its doc ("A possible buffer usage count") are now misleading. Update pgbuffercache.sgml and the expected regression output to reflect the reduced value domain. (high confidence)

usage_counts[usage_count]++;

if (buf_state & BM_DIRTY)
Expand Down
1 change: 0 additions & 1 deletion contrib/pg_prewarm/autoprewarm.c
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,6 @@ autoprewarm_database_main(Datum main_arg)
stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE |
READ_STREAM_DEFAULT |
READ_STREAM_USE_BATCHING,
NULL,
rel,
p.forknum,
apw_read_stream_next_block,
Expand Down
1 change: 0 additions & 1 deletion contrib/pg_prewarm/pg_prewarm.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,6 @@ pg_prewarm(PG_FUNCTION_ARGS)
stream = read_stream_begin_relation(READ_STREAM_MAINTENANCE |
READ_STREAM_FULL |
READ_STREAM_USE_BATCHING,
NULL,
rel,
forkNumber,
block_range_read_stream_cb,
Expand Down
7 changes: 1 addition & 6 deletions contrib/pg_visibility/pg_visibility.c
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,6 @@ collect_visibility_data(Oid relid, bool include_pd)
vbits *info;
BlockNumber blkno;
Buffer vmbuffer = InvalidBuffer;
BufferAccessStrategy bstrategy = GetAccessStrategy(BAS_BULKREAD);
BlockRangeReadStreamPrivate p;
ReadStream *stream = NULL;

Expand All @@ -514,7 +513,6 @@ collect_visibility_data(Oid relid, bool include_pd)
*/
stream = read_stream_begin_relation(READ_STREAM_FULL |
READ_STREAM_USE_BATCHING,
bstrategy,
rel,
MAIN_FORKNUM,
block_range_read_stream_cb,
Expand All @@ -538,8 +536,7 @@ collect_visibility_data(Oid relid, bool include_pd)

/*
* Page-level data requires reading every block, so only get it if the
* caller needs it. Use a buffer access strategy, too, to prevent
* cache-trashing.
* caller needs it.
*/
if (include_pd)
{
Expand Down Expand Up @@ -700,7 +697,6 @@ collect_corrupt_items(Oid relid, bool all_visible, bool all_frozen)
Relation rel;
corrupt_items *items;
Buffer vmbuffer = InvalidBuffer;
BufferAccessStrategy bstrategy = GetAccessStrategy(BAS_BULKREAD);
TransactionId OldestXmin = InvalidTransactionId;
struct collect_corrupt_items_read_stream_private p;
ReadStream *stream;
Expand Down Expand Up @@ -734,7 +730,6 @@ collect_corrupt_items(Oid relid, bool all_visible, bool all_frozen)
p.all_frozen = all_frozen;
p.all_visible = all_visible;
stream = read_stream_begin_relation(READ_STREAM_FULL,
bstrategy,
rel,
MAIN_FORKNUM,
collect_corrupt_items_read_stream_next_block,
Expand Down
Loading