[ 
https://issues.apache.org/jira/browse/HDFS-4461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13687130#comment-13687130
 ] 

Todd Lipcon commented on HDFS-4461:
-----------------------------------

todd@todd-w510:~$ cat /tmp/c
A few quick comments on the patch:

{code}
+      return path.replaceAll("(?<!^)(\\\\|/){2,}",
+          Matcher.quoteReplacement(File.separator));
{code}
Can you introduce a constant {{Pattern}} instance for this regex? That way 
you'll avoid the overhead of recompiling the regex each time this is called.

--
- Can you add comments to the {{blockSuffix}} and {{metaSuffix}} members about 
their behavior when null? If I understand correctly, it would be something like:

{code}
/**
 * The block file path, relative to the volume's base directory.
 * If there was no block file found, this may be null. If 'vol'
 * is null, then this is the full path of the block file.
 */
private final String blockSuffix;

/**
 * The suffix of the meta file path relative to the block file.
 * If blockSuffix is null, then this will be the entire path relative
 * to the volume base directory, or an absolute path if vol is also
 * null.
 */
private final String metaSuffix;
{code}


- Maybe add a simple unit test for ScanInfo to test the various combinations, 
making sure that you get back the same paths that you put in?
                
> DirectoryScanner: volume path prefix takes up memory for every block that is 
> scanned 
> -------------------------------------------------------------------------------------
>
>                 Key: HDFS-4461
>                 URL: https://issues.apache.org/jira/browse/HDFS-4461
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>    Affects Versions: 2.0.3-alpha
>            Reporter: Colin Patrick McCabe
>            Assignee: Colin Patrick McCabe
>            Priority: Minor
>         Attachments: HDFS-4461.002.patch, HDFS-4461.003.patch, 
> HDFS-4461.004.patch, memory-analysis.png
>
>
> In the {{DirectoryScanner}}, we create a class {{ScanInfo}} for every block.  
> This object contains two File objects-- one for the metadata file, and one 
> for the block file.  Since those File objects contain full paths, users who 
> pick a lengthly path for their volume roots will end up using an extra 
> N_blocks * path_prefix bytes per block scanned.  We also don't really need to 
> store File objects-- storing strings and then creating File objects as needed 
> would be cheaper.  This would be a nice efficiency improvement.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to