Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6554656

Browse files
committed
Improve tuplestore's error messages for I/O failures.
We should report the errno when we get a failure from functions likeBufFileWrite. "ERROR: write failed" is unreasonably taciturn for acase that's well within the realm of possibility; I've seen it acouple times in the buildfarm recently, in situations that wereprobably out-of-disk-space, but it'd be good to see the errnoto confirm it.I think this code was originally written without assuming thatthe buffile.c functions would return useful errno; but most othercallers *are* assuming that, and a quick look at the buffile codegives no reason to suppose otherwise.Also, a couple of the old messages were phrased on the assumptionthat a short read might indicate a logic bug in tuplestore itself;but that code's pretty well tested by now, so a filesystem-levelproblem seems much more likely.
1 parent70ad7ed commit6554656

File tree

2 files changed

+47
-22
lines changed

2 files changed

+47
-22
lines changed

‎src/backend/utils/sort/logtape.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,9 @@ ltsWriteBlock(LogicalTapeSet *lts, long blocknum, void *buffer)
208208
if (BufFileSeekBlock(lts->pfile,blocknum)!=0||
209209
BufFileWrite(lts->pfile,buffer,BLCKSZ)!=BLCKSZ)
210210
ereport(ERROR,
211-
/* XXX is it okay to assume errno is correct? */
212211
(errcode_for_file_access(),
213212
errmsg("could not write block %ld of temporary file: %m",
214-
blocknum),
215-
errhint("Perhaps out of disk space?")));
213+
blocknum)));
216214
}
217215

218216
/*
@@ -227,7 +225,6 @@ ltsReadBlock(LogicalTapeSet *lts, long blocknum, void *buffer)
227225
if (BufFileSeekBlock(lts->pfile,blocknum)!=0||
228226
BufFileRead(lts->pfile,buffer,BLCKSZ)!=BLCKSZ)
229227
ereport(ERROR,
230-
/* XXX is it okay to assume errno is correct? */
231228
(errcode_for_file_access(),
232229
errmsg("could not read block %ld of temporary file: %m",
233230
blocknum)));

‎src/backend/utils/sort/tuplestore.c

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -501,15 +501,19 @@ tuplestore_select_read_pointer(Tuplestorestate *state, int ptr)
501501
state->writepos_file,
502502
state->writepos_offset,
503503
SEEK_SET)!=0)
504-
elog(ERROR,"tuplestore seek failed");
504+
ereport(ERROR,
505+
(errcode_for_file_access(),
506+
errmsg("could not seek in tuplestore temporary file: %m")));
505507
}
506508
else
507509
{
508510
if (BufFileSeek(state->myfile,
509511
readptr->file,
510512
readptr->offset,
511513
SEEK_SET)!=0)
512-
elog(ERROR,"tuplestore seek failed");
514+
ereport(ERROR,
515+
(errcode_for_file_access(),
516+
errmsg("could not seek in tuplestore temporary file: %m")));
513517
}
514518
break;
515519
default:
@@ -834,7 +838,9 @@ tuplestore_puttuple_common(Tuplestorestate *state, void *tuple)
834838
if (BufFileSeek(state->myfile,
835839
state->writepos_file,state->writepos_offset,
836840
SEEK_SET)!=0)
837-
elog(ERROR,"tuplestore seek to EOF failed");
841+
ereport(ERROR,
842+
(errcode_for_file_access(),
843+
errmsg("could not seek in tuplestore temporary file: %m")));
838844
state->status=TSS_WRITEFILE;
839845

840846
/*
@@ -936,7 +942,9 @@ tuplestore_gettuple(Tuplestorestate *state, bool forward,
936942
if (BufFileSeek(state->myfile,
937943
readptr->file,readptr->offset,
938944
SEEK_SET)!=0)
939-
elog(ERROR,"tuplestore seek failed");
945+
ereport(ERROR,
946+
(errcode_for_file_access(),
947+
errmsg("could not seek in tuplestore temporary file: %m")));
940948
state->status=TSS_READFILE;
941949
/* FALL THRU into READFILE case */
942950

@@ -998,7 +1006,9 @@ tuplestore_gettuple(Tuplestorestate *state, bool forward,
9981006
if (BufFileSeek(state->myfile,0,
9991007
-(long) (tuplen+sizeof(unsignedint)),
10001008
SEEK_CUR)!=0)
1001-
elog(ERROR,"bogus tuple length in backward scan");
1009+
ereport(ERROR,
1010+
(errcode_for_file_access(),
1011+
errmsg("could not seek in tuplestore temporary file: %m")));
10021012
Assert(!state->truncated);
10031013
returnNULL;
10041014
}
@@ -1013,7 +1023,9 @@ tuplestore_gettuple(Tuplestorestate *state, bool forward,
10131023
if (BufFileSeek(state->myfile,0,
10141024
-(long)tuplen,
10151025
SEEK_CUR)!=0)
1016-
elog(ERROR,"bogus tuple length in backward scan");
1026+
ereport(ERROR,
1027+
(errcode_for_file_access(),
1028+
errmsg("could not seek in tuplestore temporary file: %m")));
10171029
tup=READTUP(state,tuplen);
10181030
returntup;
10191031

@@ -1213,7 +1225,9 @@ tuplestore_rescan(Tuplestorestate *state)
12131225
caseTSS_READFILE:
12141226
readptr->eof_reached= false;
12151227
if (BufFileSeek(state->myfile,0,0L,SEEK_SET)!=0)
1216-
elog(ERROR,"tuplestore seek to start failed");
1228+
ereport(ERROR,
1229+
(errcode_for_file_access(),
1230+
errmsg("could not seek in tuplestore temporary file: %m")));
12171231
break;
12181232
default:
12191233
elog(ERROR,"invalid tuplestore state");
@@ -1276,14 +1290,18 @@ tuplestore_copy_read_pointer(Tuplestorestate *state,
12761290
state->writepos_file,
12771291
state->writepos_offset,
12781292
SEEK_SET)!=0)
1279-
elog(ERROR,"tuplestore seek failed");
1293+
ereport(ERROR,
1294+
(errcode_for_file_access(),
1295+
errmsg("could not seek in tuplestore temporary file: %m")));
12801296
}
12811297
else
12821298
{
12831299
if (BufFileSeek(state->myfile,
12841300
dptr->file,dptr->offset,
12851301
SEEK_SET)!=0)
1286-
elog(ERROR,"tuplestore seek failed");
1302+
ereport(ERROR,
1303+
(errcode_for_file_access(),
1304+
errmsg("could not seek in tuplestore temporary file: %m")));
12871305
}
12881306
}
12891307
elseif (srcptr==state->activeptr)
@@ -1427,10 +1445,10 @@ getlen(Tuplestorestate *state, bool eofOK)
14271445
nbytes=BufFileRead(state->myfile, (void*)&len,sizeof(len));
14281446
if (nbytes==sizeof(len))
14291447
returnlen;
1430-
if (nbytes!=0)
1431-
elog(ERROR,"unexpected end of tape");
1432-
if (!eofOK)
1433-
elog(ERROR,"unexpected end of data");
1448+
if (nbytes!=0|| !eofOK)
1449+
ereport(ERROR,
1450+
(errcode_for_file_access(),
1451+
errmsg("could not read from tuplestore temporary file: %m")));
14341452
return0;
14351453
}
14361454

@@ -1469,14 +1487,20 @@ writetup_heap(Tuplestorestate *state, void *tup)
14691487

14701488
if (BufFileWrite(state->myfile, (void*)&tuplen,
14711489
sizeof(tuplen))!=sizeof(tuplen))
1472-
elog(ERROR,"write failed");
1490+
ereport(ERROR,
1491+
(errcode_for_file_access(),
1492+
errmsg("could not write to tuplestore temporary file: %m")));
14731493
if (BufFileWrite(state->myfile, (void*)tupbody,
14741494
tupbodylen)!= (size_t)tupbodylen)
1475-
elog(ERROR,"write failed");
1495+
ereport(ERROR,
1496+
(errcode_for_file_access(),
1497+
errmsg("could not write to tuplestore temporary file: %m")));
14761498
if (state->backward)/* need trailing length word? */
14771499
if (BufFileWrite(state->myfile, (void*)&tuplen,
14781500
sizeof(tuplen))!=sizeof(tuplen))
1479-
elog(ERROR,"write failed");
1501+
ereport(ERROR,
1502+
(errcode_for_file_access(),
1503+
errmsg("could not write to tuplestore temporary file: %m")));
14801504

14811505
FREEMEM(state,GetMemoryChunkSpace(tuple));
14821506
heap_free_minimal_tuple(tuple);
@@ -1495,10 +1519,14 @@ readtup_heap(Tuplestorestate *state, unsigned int len)
14951519
tuple->t_len=tuplen;
14961520
if (BufFileRead(state->myfile, (void*)tupbody,
14971521
tupbodylen)!= (size_t)tupbodylen)
1498-
elog(ERROR,"unexpected end of data");
1522+
ereport(ERROR,
1523+
(errcode_for_file_access(),
1524+
errmsg("could not read from tuplestore temporary file: %m")));
14991525
if (state->backward)/* need trailing length word? */
15001526
if (BufFileRead(state->myfile, (void*)&tuplen,
15011527
sizeof(tuplen))!=sizeof(tuplen))
1502-
elog(ERROR,"unexpected end of data");
1528+
ereport(ERROR,
1529+
(errcode_for_file_access(),
1530+
errmsg("could not read from tuplestore temporary file: %m")));
15031531
return (void*)tuple;
15041532
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp