Ticket #74 (closed defect: fixed)
Blocked entry tasks not rescheduled on transaction end
| Reported by: | T.Doenz | Owned by: | T.Doenz |
|---|---|---|---|
| Priority: | critical | Milestone: | 2.1 |
| Component: | CAPI3-Native | Version: | 2.1 |
| Keywords: | Cc: |
Description
Blocked entry tasks (read, take, test, delete, write) are not rescheduled, although they should be, under certain conditions. For example, if a take (or read, test, delete) is performed on an empty container with an explicit transaction, the task is blocked but not rescheduled when the explicit transaction ends (commit or rollback). The reason is, that when the take operation returns with DELAYABLE, no LogItem is added to the transaction log, and thus the container used in the operation is not returned by DefaultTransaction.getAccessedContainers called in SynchronizedWaitAndEventManager.processTransactionCommit/Rollback. This is the case for the CAPI-3 status DELAYABLE and LOCKED. The write operation is affected only when it returns with LOCKED because the container is locked, otherwise a LogItem is added before the actual operation (writing the entry to the container) is performed.

Test cases showing this bug are in the class Ticket74BlockedTaskNotRescheduledOnTxEnd (module core-integration-test).