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

Jing Zhao commented on HDFS-4372:
---------------------------------

Hi Chris,

   The patch looks very good to me. Currently the patch needs rebase (mainly 
for the changes in FSImageFormat.java). Some thoughts about the patch:

1. FSImageFormat.java
After snapshot is supported, the number of files/directories that is read in 
the head of the fsimage (denoted as N_total), may no longer be equal to the 
number of times of invocation of loadINode(...). This is because when we 
compute the total namespace quota usage, some nodes may be counted multiple 
times (in case that rename happened with existence of snapshots). Thus when 
using a counter to track the number of inodes loaded from the fsimage, it is 
challenging to keep the final value of the counter equal to N_total.

So instead of adding extra complex counting logic to fsimage loading, do you 
think we can simply set the counter of inodes to N_total after finishing 
loading the inodes from a fsimage?

2. FSNamesystem.java, in loadFSImage(...),

{code}
+      } else {
+        // No need to save, so mark the phase done.
+        StartupProgress prog = NameNode.getStartupProgress();
+        prog.beginPhase(Phase.SAVING_CHECKPOINT);
+        prog.endPhase(Phase.SAVING_CHECKPOINT);
{code}

Here can we present that we have not saved the namespace in the WebUI? (Users 
may also get the same information when they see a very small elapsed time for 
the phase).

Some minor issues:

3. FSEditLogLoader.java
Why do we need to create a step in both loadFSEdits(...) and 
loadEditRecords(...)?

4. StartupProgress.java
4.1 There are some unused imports.

4.2 In lazyInitStep(...), maybe the code 
{code}
  if (!steps.containsKey(step)) {
    steps.putIfAbsent(step, new StepTracking());
  }
  return steps.get(step);
{code}

can be simplified to 

{code}
  steps.putIfAbsent(step, new StepTracking());
  return steps.get(step);
{code}

or something like 

{code}
  StepTracking st = new StepTracking();
  StepTracking oldValue =  steps.putIfAbsent(step, st);
  return oldValue != null ? oldValue : st;
{code}

5. StepTracking.java and PhaseTracking.java
Can we use long instead of Long for beginTime/endTime/total? We can initialize 
them with -1.
                
> Track NameNode startup progress
> -------------------------------
>
>                 Key: HDFS-4372
>                 URL: https://issues.apache.org/jira/browse/HDFS-4372
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: namenode
>    Affects Versions: 3.0.0
>            Reporter: Chris Nauroth
>            Assignee: Chris Nauroth
>         Attachments: HDFS-4372.1.patch
>
>
> Track detailed progress information about the steps of NameNode startup to 
> enable display to users.

--
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