[
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: [email protected]
For additional commands, e-mail: [email protected]