You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Shangshu Qian (Jira)" <ji...@apache.org> on 2025/05/11 21:20:00 UTC

[jira] [Created] (HDDS-13020) The LinkedBlockingQueue in ContainerReportQueue may cause unnecessary contentions between EventExecutors

Shangshu Qian created HDDS-13020:
------------------------------------

             Summary: The LinkedBlockingQueue in ContainerReportQueue may cause unnecessary contentions between EventExecutors
                 Key: HDDS-13020
                 URL: https://issues.apache.org/jira/browse/HDDS-13020
             Project: Apache Ozone
          Issue Type: Bug
          Components: SCM
    Affects Versions: 1.4.0
            Reporter: Shangshu Qian


In the current implementation of `ContainerReportQueue`, the `orderingQueue` is initialized as a `LinkedBlockingQueue`, and the `FixedThreadPoolWithAffinityExecutor` expects a BlockingQueue interface for its internal `workQueues`.

Using a `LinkedBlockingQueue` introduces unnecessary locking at every queue operation, and could be of low performance. We can substitute it with `ConcurrentLinkedQueue`, which has a much better performance.

Plus, it seems that we don't really need the blocking behavior of the queue because we would check the remaining capacity even before adding value to the queue. Also, we already holds a lock for this object. There is no need for additional locking.
{code:java}
  @Override
  public boolean add(@NotNull ContainerReport value) {
    Objects.requireNonNull(value);
    synchronized (this) {
      if (remainingCapacity() == 0) {
        throw new IllegalStateException("capacity not available");
      }      return addValue(value);
    }
  }
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org