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

Stephen O'Donnell commented on HDDS-2446:
-----------------------------------------

I agree we need to be careful about how datanodeInfo is used with this change. 
The only place a datanodeInfo gets created right now is at DN registration. If 
a DN goes dead, all its containerReplica are removed from container manager, so 
on re-registration if a new datanodeDetails and datanodeInfo are created all 
new replicas will contain those objects. With the current code I think we are 
safe on this.

The performance of looking up datanodeInfo for each replica would not be 
terrible. It would come down to a few method calls and a map lookup per 
container replica, but I would like to avoid this if I can. We would need to do 
this lookup anytime a replica is selected for reading (to ensure the node is 
still IN_SERVICE) and anytime the ReplicationManager checks the containers for 
all containerReplicas in the cluster.

Once place we may need to be careful is when a maintenance node re-registers 
after maintenance, as we would need to retain those replicas in SCM even when 
the node goes dead I think.

> ContainerReplica should contain DatanodeInfo rather than DatanodeDetails
> ------------------------------------------------------------------------
>
>                 Key: HDDS-2446
>                 URL: https://issues.apache.org/jira/browse/HDDS-2446
>             Project: Hadoop Distributed Data Store
>          Issue Type: Sub-task
>          Components: SCM
>    Affects Versions: 0.5.0
>            Reporter: Stephen O'Donnell
>            Assignee: Stephen O'Donnell
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The ContainerReplica object is used by the SCM to track containers reported 
> by the datanodes. The current fields stored in ContainerReplica are:
> {code}
> final private ContainerID containerID;
> final private ContainerReplicaProto.State state;
> final private DatanodeDetails datanodeDetails;
> final private UUID placeOfBirth;
> {code}
> Now we have introduced decommission and maintenance mode, the replication 
> manager (and potentially other parts of the code) need to know the status of 
> the replica in terms of IN_SERVICE, DECOMMISSIONING, DECOMMISSIONED etc to 
> make replication decisions.
> The DatanodeDetails object does not carry this information, however the 
> DatanodeInfo object extends DatanodeDetails and does carry the required 
> information.
> As DatanodeInfo extends DatanodeDetails, any place which needs a 
> DatanodeDetails can accept a DatanodeInfo instead.
> In this Jira I propose we change the DatanodeDetails stored in 
> ContainerReplica to DatanodeInfo.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to