[
https://issues.apache.org/jira/browse/HDFS-7692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14308419#comment-14308419
]
Lei (Eddy) Xu commented on HDFS-7692:
-------------------------------------
[~guoleitao] Thanks for working on this. It looks very good overall.
Just have a few comments:
{code}
try {
addStorageThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
{code}
Could you log the Exception here and rethrow it as {{IOException}}?
Moreover, in tests, I think you do not need to catch this
{{InterruptedException}}. If such an exception occurs, it would be better to
just let the test case fail.
In {{TestDataStorage#testAddStorageDirectoreis}}:
{code}
for (NamespaceInfo ni : namespaceInfos) {
139 storage.addStorageLocations(mockDN, ni, locations, START_OPT);
148 pool = Executors.newFixedThreadPool(numThreads);
149 storage.addStorageLocations(mockDN, ni, locations, START_OPT,
pool,
150 addedLocation);
151 pool.shutdown();
{code}
You created one thread pool for each Namespace, and wait this pool to terminate
in the loop. I guess that your intention was creating a global pool and let
each namespace share the same thread pool?
{code}
Executors.newFixedThreadPool(null != datanode.getConf() ? datanode
493 .getConf().getInt(
494 DFSConfigKeys.DFS_DATANODE_DIRECTORYSCAN_THREADS_KEY,
495
DFSConfigKeys.DFS_DATANODE_DIRECTORYSCAN_THREADS_DEFAULT)
496 : dataDirs.size());
{code}
Will this {{null != datanode.getConf()}} condition actually happen?
{code}
/*
* @param successVolumes a list of successfully loaded volumes.
*/
{code}
Maybe it is better to re-phrase this as something like "An output container to
fill with successfully loaded volumes"?
I'd love to give a non-binding +1 once these comments are addressed.
> DataStorage#addStorageLocations(...) should support MultiThread to speedup
> the upgrade of block pool at multi storage directories.
> ----------------------------------------------------------------------------------------------------------------------------------
>
> Key: HDFS-7692
> URL: https://issues.apache.org/jira/browse/HDFS-7692
> Project: Hadoop HDFS
> Issue Type: Improvement
> Components: datanode
> Affects Versions: 2.5.2
> Reporter: Leitao Guo
> Attachments: HDFS-7692.01.patch
>
>
> {code:title=DataStorage#addStorageLocations(...)|borderStyle=solid}
> for (StorageLocation dataDir : dataDirs) {
> File root = dataDir.getFile();
> ... ...
> bpStorage.recoverTransitionRead(datanode, nsInfo, bpDataDirs,
> startOpt);
> addBlockPoolStorage(bpid, bpStorage);
> ... ...
> successVolumes.add(dataDir);
> }
> {code}
> In the above code the storage directories will be analyzed one by one, which
> is really time consuming when upgrading HDFS with datanodes have dozens of
> large volumes. MultiThread dataDirs analyzing should be supported here to
> speedup upgrade.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)