[
https://issues.apache.org/jira/browse/HDFS-7496?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lei (Eddy) Xu updated HDFS-7496:
--------------------------------
Attachment: HDFS-7496.001.patch
Thanks for the reviews, [~cmccabe]. They are very helpful. I have made changes
accordingly, detailed as following:
bq. * Rather than having a boolean hasReference, let's have an actual pointer
to the FsVolumeSpi object.
bq. * We should release the reference count in close(), not in the finally block
bq. * We don't need this code any more:
Done
bq. This change seems unrelated to this JIRA...
Yes, this is not related. I removed it from this patch. I should follow another
JIRA to use {{File#canonicalPath}} to compare the volumes. But it should not
throw {{IOE}} for {{File#getCanonicalPath()}}, as you mentioned above.
bq. How about using Preconditions.checkNonNull here... might look nicer
It is for simplifying the test code, i.e., it does not need to construct a
{{Datanode}} object for {{FsVolumeImpl}} tests.
bq. What I was envisioning was having getNextVolume increment the reference
count when it retrieved the volume,
{{getNextVolume}} is not the only place to pass an _active_ volume. I have made
the change that if BlockReceiver's constructor successes, it must hold a
reference count from
{{FsDatasetImpl#createRbw/createTemporary/append/recoverRbw/recoverAppend}}.
Also I added a {{FsVolumeReference}} helper class to let the caller use
{{try-with-resources}} on the reference count.
> Fix FsVolume removal race conditions on the DataNode
> -----------------------------------------------------
>
> Key: HDFS-7496
> URL: https://issues.apache.org/jira/browse/HDFS-7496
> Project: Hadoop HDFS
> Issue Type: Bug
> Reporter: Colin Patrick McCabe
> Assignee: Lei (Eddy) Xu
> Attachments: HDFS-7496.000.patch, HDFS-7496.001.patch
>
>
> We discussed a few FsVolume removal race conditions on the DataNode in
> HDFS-7489. We should figure out a way to make removing an FsVolume safe.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)