index b39c93346567ac7f4753b87ce927fde974346591..f99c9d9001342841d29963958a85a877a2db5adb 100644 (file)
@@ -1981,7 +1981,7 @@ md_readv_complete(PgAioHandle *ioh, PgAioResult prior_result, uint8 cb_data)
* might not process the query result immediately (because it is busy
* doing another part of query processing) or at all (e.g. if it was
* cancelled or errored out due to another IO also failing). The
- * issuer of the IO will emit an ERROR when processing the IO's
+ * definer of the IO will emit an ERROR when processing the IO's
* results
*/
pgaio_result_report(result, td, LOG_SERVER_ONLY);
index 320dc04d83ae4a7d98be692603d4ed3bbc3b063c..4540284f5817c2e92ef4f1798d1dc0fe170f0a68 100644 (file)
@@ -738,6 +738,14 @@ smgrreadv(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
* blocks not successfully read might bear unspecified modifications, up to
* the full nblocks). This maintains the abstraction that smgr operates on the
* level of blocks, rather than bytes.
+ *
+ * Compared to smgrreadv(), more responsibilities fall on the caller:
+ * - Partial reads need to be handled by the caller re-issuing IO for the
+ * unread blocks
+ * - smgr will ereport(LOG_SERVER_ONLY) some problems, but higher layers are
+ * responsible for pgaio_result_report() to mirror that news to the user (if
+ * the IO results in PGAIO_RS_WARNING) or abort the (sub)transaction (if
+ * PGAIO_RS_ERROR).
*/
void
smgrstartreadv(PgAioHandle *ioh,