Details
-
Bug
-
Status: Resolved
-
Blocker
-
Resolution: Fixed
-
None
Description
In the ContainerStateMachine.submitTask(..) method, we can have the following case
- The applyTransaction thread enters submitTask(..). It gets a queue Q for a container C from containerTaskQueues, where Q is empty at that time.
- Right before applyTransaction submits a task T1, the executor has completed running a previous task T2 for container C. Since Q is empty, the executor removes Q from containerTaskQueues.
- The applyTransaction thread submits task T1 to Q. It does not aware that Q is no longer in containerTaskQueues.
- Now, the applyTransaction thread submits a new task T3 for container C. Since there is no queue for container C in containerTaskQueues, it creates a new queue Q2 and submits T3 to Q2.
As a result, T1 and T3 for container C can run in parallel since there are two queues.
Attachments
Issue Links
- causes
-
HDDS-8141 Exception "Non-force deletion of non-empty container is not allowed" in datanode logs
- Resolved
- is related to
-
HDDS-8141 Exception "Non-force deletion of non-empty container is not allowed" in datanode logs
- Resolved
-
HDDS-4352 Container info is not correct when there is QUASI_CLOSED replica
- Resolved
- relates to
-
HDDS-7701 Data loss by deleting containers having non-deleted keys
- Resolved
-
HDDS-5359 Incorrect BLOCKCOUNT and BYTESUSED in container DB
- Resolved
- links to