Errors were occasionally seen in obscure situations where FairCom Server could not write an updated data cache page to a non-transaction-controlled c-tree data file when physically closing the file (for example if the data file was created with a zero extension size and the disk is full).
The following example shows messages from CTSTATUS.FCS resulting from this problem. mark.dat is a non-transaction data file and cxd04.dat is a ctTRNLOG data file. Note the write error on mark.dat due to no disk space, and the write error on cxd04.dat due to an invalid file descriptor (because cxd04.dat was opened and then closed before the flush of the page was attempted):
Mon Nov 7 10:51:14 2016
- User# 00014 WRITE_ERR: mark.dat at 0:8000x sysiocod=112 bufsiz=32768 bytes written=0[0] ioLoc=0: 37
Mon Nov 7 10:51:18 2016
- User# 00014 FAILED IO: ctwrtbuf...: 37
Mon Nov 7 10:51:18 2016
- User# 00014 mark.dat: 37
Mon Nov 7 10:52:09 2016
- User# 00014 Error on close file. locale:11 sysiocod:0 uerr_cod: 37
Mon Nov 7 11:02:15 2016
- User# 00005 WRITE_ERR: cxd04.dat at ffffffff:ffffffffx sysiocod=6 bufsiz=32768 bytes written=0[0] ioLoc=0: 37
Mon Nov 7 11:02:25 2016
- User# 00005 FAILED TRAN IO: ctwrtbuf...: 37
Mon Nov 7 11:02:26 2016
- User# 00005 cxd04.dat: 37
The cache flushing logic has been modified to handle the situation properly and eliminate this problem. However, it is always advisable to ensure you have sufficient disk space for c-treeACE controlled data files and the system files (L*.FCS files, etc.) created by the c-treeACE Server process.
Note: By default, FairCom Server treats a write error on a transaction-controlled (ctTRNLOG) file as a fatal error and it immediately shuts down in this situation. As a result, the changes described here primarily affect non-ctTRNLOG data files. Also, an error writing an index node to disk when physically closing the index file was already properly handled.