[ https://issues.apache.org/jira/browse/HDFS-7758?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14382425#comment-14382425 ]
Colin Patrick McCabe commented on HDFS-7758: -------------------------------------------- Thanks, Eddy. Sorry that reviews have been a little slow. It's nice to see that we can use the new java 7 try-with-resources with this class. Instead of {{ReferredFsVolumeList}}, how about calling the class {{FsVolumeRefs}}? {code} 295 } else { 296 // If the volume is not put into a volume scanner, it does not need to 297 // hold the reference. 298 IOUtils.cleanup(null, ref); {code} This looks like a bugfix, separate from this code cleanup. Let's file another JIRA for this and get it committed quickly. {code} -public interface FsVolumeReference extends Closeable { +public abstract class FsVolumeReference implements Closeable { {code} What's the motivation for switching from an interface to an abstract class? An interface seems more appropriate here since there are no implementations of any of the functions. Why do we need both {{ReferredFsVolumeListImpl}} and {{ReferredFsVolumeList}}? It seems like every FsDatasetSpi implementation is going to want to implement this the same way, as a list of {{FsVolumeRef}} objects. Since {{FsVolumeRef}} objects are used by every FSDataset implementation, this code is already generic and we don't need more abstractions. > Retire FsDatasetSpi#getVolumes() and use FsDatasetSpi#getVolumeRefs() instead > ----------------------------------------------------------------------------- > > Key: HDFS-7758 > URL: https://issues.apache.org/jira/browse/HDFS-7758 > Project: Hadoop HDFS > Issue Type: Improvement > Components: datanode > Affects Versions: 2.6.0 > Reporter: Lei (Eddy) Xu > Assignee: Lei (Eddy) Xu > Attachments: HDFS-7758.000.patch, HDFS-7758.001.patch, > HDFS-7758.002.patch, HDFS-7758.003.patch > > > HDFS-7496 introduced reference-counting the volume instances being used to > prevent race condition when hot swapping a volume. > However, {{FsDatasetSpi#getVolumes()}} can still leak the volume instance > without increasing its reference count. In this JIRA, we retire the > {{FsDatasetSpi#getVolumes()}} and propose {{FsDatasetSpi#getVolumeRefs()}} > and etc. method to access {{FsVolume}}. Thus it makes sure that the consumer > of {{FsVolume}} always has correct reference count. -- This message was sent by Atlassian JIRA (v6.3.4#6332)