[
https://issues.apache.org/jira/browse/HIVE-26677?focusedWorklogId=821678&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-821678
]
ASF GitHub Bot logged work on HIVE-26677:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 29/Oct/22 06:27
Start Date: 29/Oct/22 06:27
Worklog Time Spent: 10m
Work Description: cnauroth opened a new pull request, #3713:
URL: https://github.com/apache/hive/pull/3713
…to prevent thread exhaustion.
### What changes were proposed in this pull request?
As described during a [release candidate
vote](https://lists.apache.org/thread/8qjf7x9t9v09d79hlzh712ls4zthdwrh):
[HIVE-24484](https://issues.apache.org/jira/browse/HIVE-24484) introduced a
change to limit `hive.server2.webui.max.threads` to 4. Jetty enforces thread
leasing to warn or abort if there aren't enough threads available [1]. During
startup, it attempts to lease a thread per NIO selector [2]. By default, the
number of NIO selectors to use is determined based on available CPUs [3]. This
is mostly a passthrough to `Runtime.availableProcessors()` [4]. In my case,
running on a machine with 16 CPUs, this ended up creating more than 4
selectors, therefore requiring more than 4 threads and violating the lease
check. I was able to work around this by passing the
`JETTY_AVAILABLE_PROCESSORS` system property to constrain the number of CPUs
available to Jetty.
Since we are intentionally constraining the pool to 4 threads during itests,
let's also limit `JETTY_AVAILABLE_PROCESSORS` in `maven.test.jvm.args` of the
root pom.xml, so that others don't run into this problem later.
[1]
https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ThreadPoolBudget.java#L165
[2]
https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java#L255
[3]
https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java#L79
[4]
https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-util/src/main/java/org/eclipse/jetty/util/ProcessorUtils.java#L45
### Why are the changes needed?
This prevents spurious failures during itests, which could especially be a
nuisance during release candidate verification.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
During the release candidate vote, I confirmed that this change fixed itests
in my environment.
Issue Time Tracking
-------------------
Worklog Id: (was: 821678)
Remaining Estimate: 0h
Time Spent: 10m
> Constrain available processors to Jetty during test runs to prevent thread
> exhaustion.
> --------------------------------------------------------------------------------------
>
> Key: HIVE-26677
> URL: https://issues.apache.org/jira/browse/HIVE-26677
> Project: Hive
> Issue Type: Test
> Components: Test
> Reporter: Chris Nauroth
> Assignee: Chris Nauroth
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> As described during a [release candidate
> vote|https://lists.apache.org/thread/8qjf7x9t9v09d79hlzh712ls4zthdwrh]:
> HIVE-24484 introduced a change to limit {{hive.server2.webui.max.threads}} to
> 4. Jetty enforces thread leasing to warn or abort if there aren't enough
> threads available [1]. During startup, it attempts to lease a thread per NIO
> selector [2]. By default, the number of NIO selectors to use is determined
> based on available CPUs [3]. This is mostly a passthrough to
> {{Runtime.availableProcessors()}} [4]. In my case, running on a machine with
> 16 CPUs, this ended up creating more than 4 selectors, therefore requiring
> more than 4 threads and violating the lease check. I was able to work around
> this by passing the {{JETTY_AVAILABLE_PROCESSORS}} system property to
> constrain the number of CPUs available to Jetty.
> Since we are intentionally constraining the pool to 4 threads during itests,
> let's also limit {{JETTY_AVAILABLE_PROCESSORS}} in {{maven.test.jvm.args}} of
> the root pom.xml, so that others don't run into this problem later.
> [1]
> https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ThreadPoolBudget.java#L165
> [2]
> https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java#L255
> [3]
> https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-io/src/main/java/org/eclipse/jetty/io/SelectorManager.java#L79
> [4]
> https://github.com/eclipse/jetty.project/blob/jetty-9.4.40.v20210413/jetty-util/src/main/java/org/eclipse/jetty/util/ProcessorUtils.java#L45
--
This message was sent by Atlassian Jira
(v8.20.10#820010)