PostgreSQL Source Code  git master
read_stream.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * read_stream.h
4  * Mechanism for accessing buffered relation data with look-ahead
5  *
6  *
7  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/storage/read_stream.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef READ_STREAM_H
15 #define READ_STREAM_H
16 
17 #include "storage/bufmgr.h"
18 #include "storage/smgr.h"
19 
20 /* Default tuning, reasonable for many users. */
21 #define READ_STREAM_DEFAULT 0x00
22 
23 /*
24  * I/O streams that are performing maintenance work on behalf of potentially
25  * many users, and thus should be governed by maintenance_io_concurrency
26  * instead of effective_io_concurrency. For example, VACUUM or CREATE INDEX.
27  */
28 #define READ_STREAM_MAINTENANCE 0x01
29 
30 /*
31  * We usually avoid issuing prefetch advice automatically when sequential
32  * access is detected, but this flag explicitly disables it, for cases that
33  * might not be correctly detected. Explicit advice is known to perform worse
34  * than letting the kernel (at least Linux) detect sequential access.
35  */
36 #define READ_STREAM_SEQUENTIAL 0x02
37 
38 /*
39  * We usually ramp up from smaller reads to larger ones, to support users who
40  * don't know if it's worth reading lots of buffers yet. This flag disables
41  * that, declaring ahead of time that we'll be reading all available buffers.
42  */
43 #define READ_STREAM_FULL 0x04
44 
45 struct ReadStream;
46 typedef struct ReadStream ReadStream;
47 
48 /* Callback that returns the next block number to read. */
51  void *per_buffer_data);
52 
53 extern ReadStream *read_stream_begin_relation(int flags,
54  BufferAccessStrategy strategy,
55  Relation rel,
56  ForkNumber forknum,
59  size_t per_buffer_data_size);
62  BufferAccessStrategy strategy,
63  SMgrRelation smgr,
64  char smgr_persistence,
65  ForkNumber forknum,
68  size_t per_buffer_data_size);
69 extern Buffer read_stream_next_buffer(ReadStream *stream, void **per_buffer_private);
70 extern void read_stream_reset(ReadStream *stream);
71 extern void read_stream_end(ReadStream *stream);
72 
73 #endif /* READ_STREAM_H */
uint32 BlockNumber
Definition: block.h:31
int Buffer
Definition: buf.h:23
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)
Definition: read_stream.c:566
void read_stream_reset(ReadStream *stream)
Definition: read_stream.c:823
Buffer read_stream_next_buffer(ReadStream *stream, void **per_buffer_data)
Definition: read_stream.c:620
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)
Definition: read_stream.c:590
void read_stream_end(ReadStream *stream)
Definition: read_stream.c:850
BlockNumber(* ReadStreamBlockNumberCB)(ReadStream *stream, void *callback_private_data, void *per_buffer_data)
Definition: read_stream.h:49
ForkNumber
Definition: relpath.h:48
void * per_buffer_data
Definition: read_stream.c:144
size_t per_buffer_data_size
Definition: read_stream.c:143
void * callback_private_data
Definition: read_stream.c:133
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
Definition: test_ifaddrs.c:46