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

Nanda kumar commented on HDDS-726:
----------------------------------

[~shashikant], I'm still going through the patch. Please find my initial 
comments below

Looks like with this patch we will lose the performance optimization done in 
HDDS-1106.
In {{PipelineStateMap}} instead of iterating over the complete {{pipelineMap}} 
we can call {{PipelineStateMap#getPipelines(type, factor, state)}} and apply 
exclude filter on the result.
----
 

Suggestion: In {{ExcludeList}} class it would be more intuitive to use 
{{List<DatanodeDetails>}} and {{List<ContainerID>}} in place of {{List<UUID>}} 
and {{List<Long>}} respectively.
----
 

In {{BlockManagerImpl#allocateBlock}} we will be stuck forever inside the while 
loop in scenarios like below.
{noformat}
SCM State:

Pipelines: {
  P1 [dn1, dn2, dn3], 
  P2 [dn4, dn5, dn6], 
  P3 [dn7, dn8, dn9]
}

Containers: {
        C1 [P1, available space: 500MB],
        C2 [P1, available space: 500MB],
        C3 [P1, available space: 500MB],
        C4 [P2, available space: 500MB],
        C5 [P2, available space: 500MB],
        C6 [P2, available space: 500MB],
        C7 [P3, available space: 500MB],
        C8 [P3, available space: 500MB],
        C9 [P3, available space: 10MB]
}

Client:
allocateBlock {
  size: 20MB,
  replicationType: RATIS,
  repicationFactor: THREE,
  owner: XXXX,
  excludeList: {
    datanodes: [dn1, dn3],
    containerIds: [C7, C8],   
    pipelineIds: [P2]
  }
}
{noformat}
Here we will exclude pipeline P1 and P2 while choosing the pipeline.
Once we pick a pipeline we try to allocate the block in a container from that 
pipeline in a round-robin fashion, we do consider the space available in the 
container for block allocation.

In this scenarios {{containerManager.getMatchingContainer(size, owner, 
pipeline) }}call will either return C7 or C8 as those are the container which 
has space, not C9. We also will not create any new container on this pipeline 
as we already have 3 containers in here.

In {{BlockManagerImpl#allocateBlock:Line 207 - 209}} we will exclude C7 or C8 
whichever is picked in that iteration (client asked us to exclude both C7 and 
C8).

In this case, the while loop will continue forever.
----
 

{{BlockManagerImpl:224}}:

We can refactor

{{return containers.parallelStream().anyMatch(predicate) ? true : false}} 

to

{{return containers.parallelStream().anyMatch(predicate)}}

> Ozone Client should update SCM to move the container out of allocation path 
> in case a write transaction fails
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-726
>                 URL: https://issues.apache.org/jira/browse/HDDS-726
>             Project: Hadoop Distributed Data Store
>          Issue Type: Test
>            Reporter: Shashikant Banerjee
>            Assignee: Shashikant Banerjee
>            Priority: Major
>         Attachments: HDDS-726.000.patch, HDDS-726.001.patch, 
> HDDS-726.002.patch, HDDS-726.003.patch, HDDS-726.004.patch, 
> HDDS-726.005.patch, HDDS-726.006.patch, HDDS-726.007.patch, HDDS-726.008.patch
>
>
> Once an container write transaction fails, it will be marked corrupted. Once 
> Ozone client gets an exception in such case it should tell SCM to move the 
> container out of allocation path. SCM will eventually close the container.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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