Core: fix NullPointerException
when calling InMemoryLockManager#release
using Hadoop catalog
#8494
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a fix for an
NPE
problem that occurs when calling InMemoryLockManager#release using Hadoop catalog, as described in this issue(#4550). The problem arises whenlockManager#release
is finally called after renaming metadata (HadoopTableOperations#renameToFinal).The immediate cause of
NPE
is that the lockedentityId
has been removed from theHEARTBEATS
, but still exists inLOCKS
. Some concurrent operations, such as calling InMemoryLockManager#close, may result in this situation.This
NPE
can potentially cause the manifest list files to be cleaned (SnapshotProducer#cleanAll). However, this could be a mistaken cleanup since when theNPE
is thrown, the renaming metadata file may have already been completed. In this case, Iceberg considers the operation to be completed (although theversion-hint.text
has not yet been updated).Closes #4550.