[ 
https://issues.apache.org/jira/browse/HDDS-17483?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shuo Huang updated HDDS-17483:
------------------------------
    Description: 
When ContainerReportQueue is full, a new FCR is rejected before checking 
whether an older FCR from the same datanode can be replaced.

Replacing the old FCR would not increase the queue size. Instead, the old 
report remains queued and add() throws IllegalStateException from the container 
report event path.

This can be reproduced with a queue of size 1:
{code:java}
ContainerReportQueue queue = new ContainerReportQueue(1);

queue.add(oldReport);
queue.add(newReport); // Same datanode as oldReport
{code}
The second add fails with:
{noformat}
java.lang.IllegalStateException: capacity not available
  at ContainerReportQueue.add(ContainerReportQueue.java:184)
{noformat}

  was:
When ContainerReportQueue is full, a new FCR is rejected before checking
whether an older FCR from the same datanode can be replaced.

Replacing the old FCR would not increase the queue size. Instead, the old
report remains queued and add() throws IllegalStateException from the
container report event path.

This can be reproduced with a queue of size 1:

{code:java}
ContainerReportQueue queue = new ContainerReportQueue(1);

queue.add(oldReport);
queue.add(newReport); // Same datanode as oldReport
{code}

The second add fails with:

{noformat}
java.lang.IllegalStateException: capacity not available
  at ContainerReportQueue.add(ContainerReportQueue.java:184)
{noformat}


> ContainerReportQueue rejects replacement FCR when full
> ------------------------------------------------------
>
>                 Key: HDDS-17483
>                 URL: https://issues.apache.org/jira/browse/HDDS-17483
>             Project: Apache Ozone
>          Issue Type: Improvement
>            Reporter: Shuo Huang
>            Assignee: Shuo Huang
>            Priority: Major
>
> When ContainerReportQueue is full, a new FCR is rejected before checking 
> whether an older FCR from the same datanode can be replaced.
> Replacing the old FCR would not increase the queue size. Instead, the old 
> report remains queued and add() throws IllegalStateException from the 
> container report event path.
> This can be reproduced with a queue of size 1:
> {code:java}
> ContainerReportQueue queue = new ContainerReportQueue(1);
> queue.add(oldReport);
> queue.add(newReport); // Same datanode as oldReport
> {code}
> The second add fails with:
> {noformat}
> java.lang.IllegalStateException: capacity not available
>   at ContainerReportQueue.add(ContainerReportQueue.java:184)
> {noformat}



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to