Here
and here
we correctly set
shouldUnlockUponCompletion to false
but if the tablet restarts before completing the unlink stage then we replay the unlink request and forget to distinguish between the UnlinkNode->UnlinkNodeInShard and RenameNode[InDestination]->UnlinkNodeInShard cases:
|
GetFileSystem().GetDirectoryCreationInShardsEnabled(); |
this leads to incorrectly choosing this branch
|
ExecuteTx<TCompleteUnlinkNode>( |
and then we incorrectly report this crit event
|
ReportInvalidNodeRefUponCompleteUnlinkNode( |
nothing really breaks, the state of the filesystem stays consistent, so it's not really a big-big deal but we still see false positive alerts and this is still a bug
Here
nbs/cloud/filestore/libs/storage/tablet/tablet_actor_renamenode.cpp
Line 784 in a6ab0f2
and here
nbs/cloud/filestore/libs/storage/tablet/tablet_actor_renamenode_destination.cpp
Line 833 in a6ab0f2
we correctly set
shouldUnlockUponCompletionto falsebut if the tablet restarts before completing the unlink stage then we replay the unlink request and forget to distinguish between the
UnlinkNode->UnlinkNodeInShardandRenameNode[InDestination]->UnlinkNodeInShardcases:nbs/cloud/filestore/libs/storage/tablet/tablet_actor_oplog.cpp
Line 89 in a6ab0f2
this leads to incorrectly choosing this branch
nbs/cloud/filestore/libs/storage/tablet/tablet_actor_unlinknode.cpp
Line 938 in a6ab0f2
and then we incorrectly report this crit event
nbs/cloud/filestore/libs/storage/tablet/tablet_actor_unlinknode.cpp
Line 738 in a6ab0f2
nothing really breaks, the state of the filesystem stays consistent, so it's not really a big-big deal but we still see false positive alerts and this is still a bug