Prevent FPUTFGET Data Corruption with Concurrent Updates
20 January 2010
Affected Builds: All builds between 050722 through 100120 Criteria: Concurrent FPUTFGET record add/updates to variable length files. Indications: Unexpected ITIM_ERROR (160) errors
In c-tree multi-user standalone (FPUTFGET) mode, when a process updates a record, increasing the size of the record, while at the same time another process adds a record, and if there is deleted space available after the record that is being updated, the update logic could reuse that space even though the add operation has already used the space for the newly-added record.
This issue only affects the c-tree multiuser standalone mode (FPUTFGET) and does not affect the c-tree Server.
A code change applied in July 2005 modified previously correct behavior. As a result, the logic in RWTVREC() that reads the key from the space management index after locking the space that is a candidate for reuse skips the call to read the key from the space management index. This omission can cause the update to enlarge the record into space that has been reused by a record add operation. The ITIM_ERR (160) was observed in that an index key entry pointed to an offset in the data file that was within another record. That record had been enlarged by an update operation, and it overwrote a record that was added at the same time the record was updated. A simple rearrangement of code prevents this behavior.
FairCom customers on current maintenance can request an updated V9 c-treeACE line at any time. Please contact your nearest FairCom office should you have any concerns that you are impacted by this update.
|