184 void *callback_private_data,
185 void *per_buffer_data)
257 stream->
stats = stats;
338#ifdef USE_ASSERT_CHECKING
445 &stream->
buffers[buffer_index],
532 sizeof(stream->
buffers[0]) * overflow);
536 buffer_index += nblocks;
624 if (pending_read_nblocks == 0)
673 void *per_buffer_data;
766 void *callback_private_data,
767 size_t per_buffer_data_size)
775 uint32 max_pinned_buffers;
826 max_pinned_buffers =
Min(max_pinned_buffers,
849 max_pinned_buffers =
Max(1, max_pinned_buffers);
857 queue_size = max_pinned_buffers + 1;
869 size += per_buffer_data_size * queue_size;
875 if (per_buffer_data_size > 0)
950 for (
int i = 0;
i < max_ios; ++
i)
972 void *callback_private_data,
973 size_t per_buffer_data_size)
979 rel->
rd_rel->relpersistence,
982 callback_private_data,
983 per_buffer_data_size);
997 void *callback_private_data,
998 size_t per_buffer_data_size)
1007 callback_private_data,
1008 per_buffer_data_size);
1024 int16 oldest_buffer_index;
1026#ifndef READ_STREAM_DISABLE_FAST_PATH
1052 buffer = stream->
buffers[oldest_buffer_index];
1093 &stream->
buffers[oldest_buffer_index],
1163 Assert(oldest_buffer_index >= 0 &&
1165 buffer = stream->
buffers[oldest_buffer_index];
1166 if (per_buffer_data)
1180 &stream->
buffers[oldest_buffer_index]);
1223 int32 readahead_distance;
1260 int32 combine_distance;
1288#if defined(CLOBBER_FREED_MEMORY) || defined(USE_VALGRIND)
1298 void *per_buffer_data;
1301 oldest_buffer_index == 0 ?
1303 oldest_buffer_index - 1);
1305#if defined(CLOBBER_FREED_MEMORY)
1308#elif defined(USE_VALGRIND)
1330#ifndef READ_STREAM_DISABLE_FAST_PATH
void pgaio_enter_batchmode(void)
void pgaio_exit_batchmode(void)
#define InvalidBlockNumber
BlockNumber BufferGetBlockNumber(Buffer buffer)
bool StartReadBuffers(ReadBuffersOperation *operation, Buffer *buffers, BlockNumber blockNum, int *nblocks, int flags)
void ReleaseBuffer(Buffer buffer)
bool WaitReadBuffers(ReadBuffersOperation *operation)
int effective_io_concurrency
bool StartReadBuffer(ReadBuffersOperation *operation, Buffer *buffer, BlockNumber blocknum, int flags)
uint32 GetAdditionalPinLimit(void)
#define READ_BUFFERS_ISSUE_ADVICE
#define READ_BUFFERS_SYNCHRONOUSLY
static bool BufferIsValid(Buffer bufnum)
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
#define OidIsValid(objectId)
bool IsCatalogRelation(Relation relation)
bool IsCatalogRelationOid(Oid relid)
memcpy(sums, checksumBaseOffsets, sizeof(checksumBaseOffsets))
int GetAccessStrategyPinLimit(BufferAccessStrategy strategy)
uint32 GetAdditionalLocalPinLimit(void)
uint32 GetLocalPinLimit(void)
void pfree(void *pointer)
#define VALGRIND_MAKE_MEM_NOACCESS(addr, size)
#define VALGRIND_MAKE_MEM_UNDEFINED(addr, size)
BlockNumber read_stream_pause(ReadStream *stream)
ReadStream * read_stream_begin_smgr_relation(int flags, BufferAccessStrategy strategy, SMgrRelation smgr, char smgr_persistence, ForkNumber forknum, ReadStreamBlockNumberCB callback, void *callback_private_data, size_t per_buffer_data_size)
BlockNumber read_stream_next_block(ReadStream *stream, BufferAccessStrategy *strategy)
void read_stream_reset(ReadStream *stream)
Buffer read_stream_next_buffer(ReadStream *stream, void **per_buffer_data)
static void * get_per_buffer_data(ReadStream *stream, int16 buffer_index)
static bool read_stream_start_pending_read(ReadStream *stream)
ReadStream * read_stream_begin_relation(int flags, BufferAccessStrategy strategy, Relation rel, ForkNumber forknum, ReadStreamBlockNumberCB callback, void *callback_private_data, size_t per_buffer_data_size)
static bool read_stream_should_issue_now(ReadStream *stream)
static bool read_stream_should_look_ahead(ReadStream *stream)
static void read_stream_look_ahead(ReadStream *stream)
void read_stream_enable_stats(ReadStream *stream, IOStats *stats)
static void read_stream_count_wait(ReadStream *stream)
void read_stream_end(ReadStream *stream)
BlockNumber block_range_read_stream_cb(ReadStream *stream, void *callback_private_data, void *per_buffer_data)
static void read_stream_count_io(ReadStream *stream, int nblocks, int in_progress)
static BlockNumber read_stream_get_block(ReadStream *stream, void *per_buffer_data)
static void read_stream_count_prefetch(ReadStream *stream)
static void read_stream_unget_block(ReadStream *stream, BlockNumber blocknum)
static ReadStream * read_stream_begin_impl(int flags, BufferAccessStrategy strategy, Relation rel, SMgrRelation smgr, char persistence, ForkNumber forknum, ReadStreamBlockNumberCB callback, void *callback_private_data, size_t per_buffer_data_size)
void read_stream_resume(ReadStream *stream)
#define READ_STREAM_MAINTENANCE
#define READ_STREAM_USE_BATCHING
BlockNumber(* ReadStreamBlockNumberCB)(ReadStream *stream, void *callback_private_data, void *per_buffer_data)
#define READ_STREAM_SEQUENTIAL
static SMgrRelation RelationGetSmgr(Relation rel)
int get_tablespace_io_concurrency(Oid spcid)
int get_tablespace_maintenance_io_concurrency(Oid spcid)
BlockNumber last_exclusive
BlockNumber current_blocknum
BufferAccessStrategy strategy
uint16 distance_decay_holdoff
BlockNumber seq_until_processed
int16 oldest_buffer_index
BlockNumber pending_read_blocknum
int16 resume_readahead_distance
BlockNumber buffered_blocknum
int16 initialized_buffers
size_t per_buffer_data_size
int16 resume_combine_distance
ReadStreamBlockNumberCB callback
int16 pending_read_nblocks
void * callback_private_data
Buffer buffers[FLEXIBLE_ARRAY_MEMBER]
RelFileLocatorBackend smgr_rlocator
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)