[DM] Earlier commitlog creation to prevend commit locks.
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ZODB |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
2. Introduction
Under Solaris (32 bit), a FILE structure has only 8 bits to represent the file descriptor. This means, that a ZEO can effectively only use 256 file descriptors under Solaris (32 bit). Especially, the creation of temporary files, such as for the commitlog, has a high chance to fail in "fdopen" with a "ressource temporarily unavailable" (what an error message for the fact that the file descriptor is too large to fit into the File structure!).
The commitlog used to be created only after a lock was acquired. Due to a bug in the ZEO protocol a failure after this lock acquisition causes ZEO to report that the client already has started a transaction when the client later tries to commit a transaction. I.e. ZEO is unable to recover from such failures. A ZEO restart is necessary to get rid of this error state.
3. Feature
Create the commitlog before commit lock acquisition in order to affect only one commit trial rather than all subsequent ones.
If only there was a test to go with this.
The more serious problem, which is reported elsewhere, is that errors during TPC leave the client in a bad state.