<@U0A71G31CDV> We are seeing aprox. 35k/day `NoSuc...
# questions-and-troubleshooting
d
@Rocky We are seeing aprox. 35k/day
NoSuchMethodError: isStreamDeallocated()
WARNs in
fe.warn.log
on (3.5.17 shared-data mode). Traced it to a two-Netty-stack conflict. heap histo shows both
io.netty.*
(unshaded) and
<http://io.grpc.netty.shaded.io|io.grpc.netty.shaded.io>.netty.*
coexisting in the same JVM. The
pom.xml
declares
grpc-netty-shaded
but something transitive brings in a newer unshaded
grpc-netty
that calls
isStreamDeallocated()
, which doesn't exist in
grpc-core-1.63.0
. The broken cleanup path means failed gRPC streams may not be freed. We seem to have a rising old-gen floor on our leader FE that correlates with the exception rate. Confirmed
grpc.version=1.63.0
is unchanged across 3.5, 4.0, 4.1, and main. Is this known/tracked anywhere?
1
r
Based on my search of the current StarRocks documentation and GitHub issue tracker, this specific issue is not yet publicly tracked or documented. The detailed diagnosis you provided is highly specific and points to a classic dependency conflict introduced by the gRPC 1.63.0 upgrade (which added the
isStreamDeallocated()
method in
AbstractClientStream
). Here is what I can confirm based on your analysis and the current repository state: Technical Context * Dependency Conflict: StarRocks FE explicitly uses
grpc-netty-shaded
to avoid conflicts with other libraries using different Netty versions. If a transitive dependency (often from a Cloud SDK, Hadoop, or a newly added plugin) pulls in an unshaded
grpc-netty
, the JVM may load a version of
grpc-netty
that tries to call
isStreamDeallocated()
on a
grpc-core
version (likely the shaded one) that doesn't expose it correctly or is slightly out of sync. * Memory Leak: The
NoSuchMethodError
occurring during the gRPC stream cleanup/deallocation path means that resources (streams/buffers) are never released. This directly explains the rising old-gen floor on your leader FE. * Version Status: I confirmed that
grpc.version
is indeed set to
1.63.0
in the current
main
branch and recent 3.x releases. If the unshaded
grpc-netty
is coming from a transitive dependency, this risk persists across 3.5, 4.0, and 4.1. Recommendation Since this is not yet a known issue in the community, you should open a GitHub issue immediately. Your analysis is excellent and provides exactly what the maintainers need: 1. Heap Histo: Proves the coexistence of
io.netty._
and
io.grpc.netty.shaded.io.netty._
. 2. Stack Trace: The
NoSuchMethodError: isStreamDeallocated()
points directly to the failed cleanup path. 3. Dependency Tree: If you can run
mvn dependency:tree -Dverbose
on the
fe
module and identify which component is pulling in the unshaded
grpc-netty
, it will help the team add the necessary
<exclusion>
in the parent
pom.xml
. If you are using a specific cloud connector (e.g., S3/GCS/OSS) or a custom UDF/plugin, that is the most likely source of the transitive unshaded
grpc-netty
. Reference: You can check the current
fe/pom.xml
on GitHub to see existing exclusions, but this particular leak seems to have slipped through inched past the current guards. Referencesfaq/Deploy_faq.mdadministration/Meta_recovery.mdunloading/arrow_flight.mdfaq/operation_maintenance_faq.md
r
Thank you for creating that issue. Identifying
flight-core:18.0.0
as the culprit is a critical find. Your discovery confirms the root cause: * Dependency Conflict:
flight-core:18.0.0
pulls in
grpc-netty:1.65.0
(unshaded), while StarRocks expects
grpc-core:1.63.0
(via the shaded path). * Method Mismatch: The
isStreamDeallocated()
method was introduced in
grpc-netty
around version 1.64/1.65. When the 1.65.0
grpc-netty
classes attempt to call this on the 1.63.0
grpc-core
runtime, it throws the
NoSuchMethodError
. * Leak Mechanism: Because this error occurs inside the Netty event loop during stream teardown, the cleanup logic is aborted. This leaves the gRPC stream and its associated buffers in the Old Gen, leading to the memory leak you observed on the leader FE. Interim Workaround Until a fix is merged in StarRocks to exclude or align these versions, you can attempt to force the dependency resolution in your local build or environment by adding an explicit exclusion to the component pulling in Arrow Flight:
Copy code
xml
<dependency>
    <groupId>org.apache.arrow</groupId>
    <artifactId>flight-core</artifactId>
    <version>18.0.0</version>
    <exclusions>
        <exclusion>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>
I have noted the issue link (#74577). This is a high-quality bug report that will significantly help the maintainers resolve the FE memory instability in stability in shared-data mode.