Hi hackers,
When I read the code, I noticed that in SimpleLruWriteAll(), only the last 
error is 
recorded when the file fails to close. Like the following,
```void
SimpleLruWriteAll(SlruCtl ctl, bool allow_redirtied)
{
        SlruShared      shared = ctl->shared;
        SlruWriteAllData fdata;
        int64           pageno = 0;
        int                     prevbank = SlotGetBankNumber(0);
        bool            ok;
...
        /*
         * Now close any files that were open
         */
        ok = true;
        for (int i = 0; i < fdata.num_files; i++)
        {
                if (CloseTransientFile(fdata.fd[i]) != 0)
                {
                        slru_errcause = SLRU_CLOSE_FAILED;
                        slru_errno = errno;
                        pageno = fdata.segno[i] * SLRU_PAGES_PER_SEGMENT;
                        ok = false;
                }
        }
        if (!ok)
                SlruReportIOError(ctl, pageno, InvalidTransactionId);
```
// Here, SlruReportIOError() is called only once, meaning that the last error 
message is
 recorded. In my opinion, since failure to close a file is not common, logging 
an error 
message every time a failure occurs will not result in much log growth, but 
detailed error 
logging will help in most cases.

So, I changed the code to move the call to SlruReportIOError() inside the while 
loop.

Attached is the patch, I hope it can help.




Attachment: v1-0001-Fix-error-report-missing-of-SimpleLruWriteAll.patch
Description: Binary data

Reply via email to