protected String |
ConcurrencyUtil.createInformationAboutAllResourcesAcquiredAndDeferredByAllThreads(ConcurrencyManagerState concurrencyManagerState) |
Log information about all threads tracked in the concurrency manager.
|
protected boolean |
ExplainDeadLockUtil.currentThreadIsKnownToBeWaitingForAnyResource(ConcurrencyManagerState concurrencyManagerStateDto,
Thread currentCandidateThreadPartOfTheDeadLock) |
This a helper sanity check.
|
protected void |
ConcurrencyUtil.dumpConcurrencyManagerInformationStep02(ConcurrencyManagerState concurrencyManagerState) |
Dump the server log all of the information that we managed to aggregate about the current state of the
concurrency manager.
|
protected String |
ConcurrencyUtil.dumpDeadLockExplanationIfPossible(ConcurrencyManagerState concurrencyManagerState) |
|
List<DeadLockComponent> |
ExplainDeadLockUtil.explainPossibleDeadLockStartRecursion(ConcurrencyManagerState concurrencyManagerState) |
Given the concurrency manager state try to explain why we are facing a dead lock.
|
static IsBuildObjectCompleteOutcome |
ExplainDeadLockUtil.isBuildObjectOnThreadComplete(ConcurrencyManagerState concurrencyManagerStateDto,
Thread thread,
Map recursiveSet) |
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExpansionCurrentThreadBeingBlockedByActiveThreadOnCacheKey(ConcurrencyManagerState concurrencyManagerState,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyThreadWantsToAcquireButCannotGet,
boolean currentThreadWantsToAcquireForWriting) |
Try to expand the current thread from the perspective that it wants a cache key that may be own for writing by a
competitor thread.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExpansionCurrentThreadBeingBlockedByActiveWriters(ConcurrencyManagerState concurrencyManagerState,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyThreadWantsToAcquireButCannotGet,
boolean currentThreadWantsToAcquireForWriting) |
Try to expand the current thread from the perspective that it wants a cache key that may be own for writing by a competitor thread.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep01(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain) |
The algorithm expands the current thread in depth.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep02(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain) |
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep03ExpandBasedOnCacheKeyWantedForWriting(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForWritingButCannotGet) |
We are looking at thread that we know has registered itself as wanting to acquire a write lock and not managing
to make progress getting the write lock.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep03Scenario01CurrentWriterVsOtherWritersWriter(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForWritingButCannotGet) |
Expand the possibility of the current thread wanting to acquire for writing what some other already has acquired for writing.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep03Scenario02CurrentWriterVsOtherReader(ConcurrencyManagerState concurrencyManagerState,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForWritingButCannotGet) |
Expand the recursion exploring the possibility that the reason the current thread cannot acquire the cache key is
because there are readers on the cache key.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep03Scenario03CurrentWriterVsCacheKeyActiveThread(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForWritingButCannotGet) |
In scenario 3 is when we start considering the possbility our data for detecting the dead lock is not ok or the
cache is corrupted.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep04ExpandBasedOnThreadStuckOnReleaseDeferredLocks(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain) |
When a thead cannot move forward due to having deferred cache keys, it means that the thread could not go as deep
as it wanted during object building and hda to defer making some parts of the object.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep05ExpandBasedOnCacheKeyWantedForReading(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForReadingButCannotGet) |
In this case have a thread that wants to acquire for reading a cache key but it does not manage to acquire it
because the cache key is being owned by somebody else.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep05Scenario01CurrentReaderVsOtherWriters(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForWritingButCannotGet) |
Expand the possibility of the current thread wanting to acquire for writing what some other already has acquired for writing.
|
protected DeadLockComponent |
ExplainDeadLockUtil.recursiveExplainPossibleDeadLockStep05Scenario02CurrentReaderVsCacheKeyActiveThread(ConcurrencyManagerState concurrencyManagerStateDto,
int recursionMaxDepth,
int currentRecursionDepth,
Thread currentCandidateThreadPartOfTheDeadLock,
List<Thread> threadPartOfCurrentDeadLockExpansion,
Set<Thread> threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain,
ConcurrencyManager cacheKeyCurrentThreadWantsForWritingButCannotGet) |
|