Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
Currently, TableManager#updateAssignmentsInternal is fully synchronous. The scenario is as follows:
- updateAssignmentsInternal starts a RAFT group for a partition
- FSMCallerImpl finds out that its applied index is below the group committed index, so it starts to apply the missing log entries in its init() method (this is still done synchronously)
- While doing so, it invokes PartitionListener, which tries to execute an insert
- To make an insert, a PK is needed, so it the insertion code tries to obtain a PK from its future like this: pkFuture.join()
- That future is completed from IndexManager#createIndexLocally(), which is invoked by ConfigurationNotifier later than updateassignmentsInternal in the same thread
- As a result, the PK future cannot be completed before the sync updateAssignmentsInternal finishes its job and returns, and it cannot finish its job before the PK future is completed
We should make updateAssignmentsInternal async.
Attachments
Attachments
Issue Links
- is blocked by
-
IGNITE-18181 Race during table creation
- Resolved
-
IGNITE-18203 Table/index dependecy deadlock on node restart
- Resolved
- is fixed by
-
IGNITE-18203 Table/index dependecy deadlock on node restart
- Resolved
- relates to
-
IGNITE-18079 Integrate RAFT streaming snapshots
- Resolved
- links to