trouble shooting
[netty in gradle project] Caused by: java.lang.NoSuchFieldError: EPOLL_DOMAIN_CLIENT_CHANNEL_TYPE
common developer
2023. 1. 20. 10:26
what happened
gradle를 통해 firebase admin sdk library dependency를 추가 후 아래와 같은 에러 발생
Caused by: java.lang.NoSuchFieldError: EPOLL_DOMAIN_CLIENT_CHANNEL_TYPE
at io.grpc.netty.shaded.io.grpc.netty.UdsNettyChannelProvider.isAvailable(UdsNettyChannelProvider.java:34) ~[grpc-netty-shaded-1.50.1.jar:1.33.0]
at io.grpc.ManagedChannelRegistry$ManagedChannelPriorityAccessor.isAvailable(ManagedChannelRegistry.java:213) ~[grpc-api-1.50.1.jar:1.50.1]
at io.grpc.ManagedChannelRegistry$ManagedChannelPriorityAccessor.isAvailable(ManagedChannelRegistry.java:209) ~[grpc-api-1.50.1.jar:1.50.1]
at io.grpc.ServiceProviders.loadAll(ServiceProviders.java:68) ~[grpc-api-1.50.1.jar:1.50.1]
at io.grpc.ManagedChannelRegistry.getDefaultRegistry(ManagedChannelRegistry.java:101) ~[grpc-api-1.50.1.jar:1.50.1]
at io.grpc.ManagedChannelProvider.provider(ManagedChannelProvider.java:43) ~[grpc-api-1.50.1.jar:1.50.1]
at io.grpc.ManagedChannelBuilder.forTarget(ManagedChannelBuilder.java:76) ~[grpc-api-1.50.1.jar:1.50.1]
at io.mvlchain.onion.common.grpc.GrpcClientConfig$GrpcClient.toChannel(GrpcClientConfig.kt:30) ~[main/:na]
at io.mvlchain.onion.common.grpc.GrpcClientConfig.walletGrpcClient(GrpcClientConfig.kt:49) ~[main/:na]
at io.mvlchain.onion.common.grpc.GrpcClientConfig$$EnhancerBySpringCGLIB$$32ea8acd.CGLIB$walletGrpcClient$2(<generated>) ~[main/:na]
at io.mvlchain.onion.common.grpc.GrpcClientConfig$$EnhancerBySpringCGLIB$$32ea8acd$$FastClassBySpringCGLIB$$7d0fe519.invoke(<generated>) ~[main/:na]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.22.jar:5.3.22]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.22.jar:5.3.22]
...
reason
1. 구글링 결과 Netty 1.47.0이상부터는 DataflowRunnerV2 과 BigQueryIO를 함께 사용할 경우 발생하는 에러라고 예상할수 있음
2. 내가 사용하는 firebase admin sdk의 버전은 9.1.1 이였고 gradlew ${project name}:dependencies를 통해서 해당 dependency에 grpc-netty-shaded-1.50.1.jar가 포함되어 있는 걸 확인 할 수 있었다.
3. 결론적으로 firebase admin sdk가 기존의 netty를 override하면서 버전문제가 발생한 것이다.
+--- com.google.firebase:firebase-admin:9.1.1
| +--- com.google.api-client:google-api-client:2.0.0
| | +--- com.google.oauth-client:google-oauth-client:1.34.1
| | | +--- com.google.http-client:google-http-client:1.42.0 -> 1.42.2
| | | | +--- org.apache.httpcomponents:httpclient:4.5.13 (*)
| | | | +--- org.apache.httpcomponents:httpcore:4.4.15
| | | | +--- com.google.code.findbugs:jsr305:3.0.2
| | | | +--- com.google.guava:guava:30.1.1-android -> 31.1-jre (*)
| | | | +--- com.google.j2objc:j2objc-annotations:1.3
| | | | +--- io.opencensus:opencensus-api:0.31.1
| | | | | \--- io.grpc:grpc-context:1.27.2 -> 1.50.1
| | | | \--- io.opencensus:opencensus-contrib-http-util:0.31.1
| | | | +--- io.opencensus:opencensus-api:0.31.1 (*)
| | | | \--- com.google.guava:guava:29.0-android -> 31.1-jre (*)
| | | +--- com.google.http-client:google-http-client-gson:1.42.0 -> 1.42.2
| | | | +--- com.google.http-client:google-http-client:1.42.2 (*)
| | | | \--- com.google.code.gson:gson:2.9.0
| | | \--- com.google.guava:guava:31.1-android -> 31.1-jre (*)
| | +--- com.google.http-client:google-http-client-gson:1.42.1 -> 1.42.2 (*)
| | +--- com.google.guava:guava:31.1-jre (*)
| | +--- com.google.http-client:google-http-client-apache-v2:1.42.1 -> 1.42.2
| | | +--- com.google.http-client:google-http-client:1.42.2 (*)
| | | +--- org.apache.httpcomponents:httpclient:4.5.13 (*)
| | | \--- org.apache.httpcomponents:httpcore:4.4.15
| | +--- org.apache.httpcomponents:httpcore:4.4.15
| | +--- org.apache.httpcomponents:httpclient:4.5.13 (*)
| | \--- com.google.http-client:google-http-client:1.42.1 -> 1.42.2 (*)
| +--- com.google.api-client:google-api-client-gson:2.0.0
| | +--- com.google.api-client:google-api-client:2.0.0 (*)
| | +--- com.google.http-client:google-http-client:1.42.1 -> 1.42.2 (*)
| | \--- com.google.http-client:google-http-client-gson:1.42.1 -> 1.42.2 (*)
| +--- com.google.http-client:google-http-client:1.42.2 (*)
| +--- com.google.api:api-common:2.2.1
| | +--- com.google.guava:guava:31.1-jre (*)
| | +--- com.google.code.findbugs:jsr305:3.0.2
| | +--- javax.annotation:javax.annotation-api:1.3.2
| | \--- com.google.auto.value:auto-value-annotations:1.9 -> 1.10
| +--- com.google.auth:google-auth-library-oauth2-http:1.12.1
| | +--- com.google.auto.value:auto-value-annotations:1.10
| | +--- com.google.code.findbugs:jsr305:3.0.2
| | +--- com.google.auth:google-auth-library-credentials:1.12.1
| | +--- com.google.http-client:google-http-client:1.42.2 (*)
| | +--- com.google.http-client:google-http-client-gson:1.42.2 (*)
| | \--- com.google.guava:guava:31.0.1-android -> 31.1-jre (*)
| +--- com.google.cloud:google-cloud-storage:2.14.0
| | +--- com.google.guava:guava:31.1-jre (*)
| | +--- com.google.guava:failureaccess:1.0.1
| | +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
| | +--- com.google.j2objc:j2objc-annotations:1.3
| | +--- com.google.http-client:google-http-client:1.42.2 (*)
| | +--- io.opencensus:opencensus-contrib-http-util:0.31.1 (*)
| | +--- com.google.http-client:google-http-client-jackson2:1.42.2
| | +--- com.google.http-client:google-http-client-gson:1.42.2 (*)
| | +--- com.google.api-client:google-api-client:2.0.0 (*)
| | +--- com.google.oauth-client:google-oauth-client:1.34.1 (*)
| | +--- com.google.http-client:google-http-client-apache-v2:1.42.2 (*)
| | +--- com.google.apis:google-api-services-storage:v1-rev20220705-2.0.0
| | +--- com.google.code.gson:gson:2.9.1 -> 2.9.0
| | +--- com.google.cloud:google-cloud-core:2.8.22
| | +--- com.google.auto.value:auto-value-annotations:1.10
| | +--- com.google.cloud:google-cloud-core-http:2.8.22
| | +--- com.google.http-client:google-http-client-appengine:1.42.2
| | +--- com.google.api:gax-httpjson:0.104.4
| | +--- com.google.cloud:google-cloud-core-grpc:2.8.22
| | +--- io.grpc:grpc-core:1.50.1 (*)
| | +--- com.google.android:annotations:4.1.1.4
| | +--- org.codehaus.mojo:animal-sniffer-annotations:1.22
| | +--- com.google.api:gax:2.19.4
| | +--- com.google.api:gax-grpc:2.19.4
| | +--- io.grpc:grpc-alts:1.50.1
| | +--- io.grpc:grpc-grpclb:1.50.1
| | +--- org.conscrypt:conscrypt-openjdk-uber:2.5.2
| | +--- com.google.auth:google-auth-library-credentials:1.12.1
| | +--- com.google.auth:google-auth-library-oauth2-http:1.12.1 (*)
| | +--- com.google.api:api-common:2.2.1 (*)
| | +--- javax.annotation:javax.annotation-api:1.3.2
| | +--- io.opencensus:opencensus-api:0.31.1 (*)
| | +--- io.grpc:grpc-context:1.50.1
| | +--- com.google.api.grpc:proto-google-iam-v1:1.6.4
| | +--- com.google.protobuf:protobuf-java:3.21.8
| | +--- com.google.protobuf:protobuf-java-util:3.21.8 (*)
| | +--- com.google.api.grpc:proto-google-common-protos:2.9.6 (*)
| | +--- org.threeten:threetenbp:1.6.3
| | +--- com.google.api.grpc:proto-google-cloud-storage-v2:2.14.0-alpha
| | +--- com.google.api.grpc:grpc-google-cloud-storage-v2:2.14.0-alpha
| | +--- io.grpc:grpc-protobuf:1.50.1 (*)
| | +--- com.google.api.grpc:gapic-google-cloud-storage-v2:2.14.0-alpha
| | +--- com.fasterxml.jackson.core:jackson-core:2.13.4 -> 2.13.3 (*)
| | +--- com.google.code.findbugs:jsr305:3.0.2
| | +--- io.grpc:grpc-api:1.50.1 (*)
| | +--- io.grpc:grpc-netty-shaded:1.50.1 (*)
| | +--- io.perfmark:perfmark-api:0.25.0
| | +--- io.grpc:grpc-auth:1.50.1
| | +--- io.grpc:grpc-stub:1.50.1 (*)
| | +--- io.grpc:grpc-googleapis:1.50.1
| | +--- org.checkerframework:checker-qual:3.26.0
| | +--- io.grpc:grpc-xds:1.50.1
| | +--- io.opencensus:opencensus-proto:0.2.0
| | +--- io.grpc:grpc-services:1.50.1 (*)
| | +--- com.google.re2j:re2j:1.6
| | +--- com.google.api.grpc:grpc-google-iam-v1:1.6.4
| | \--- io.grpc:grpc-protobuf-lite:1.50.1 (*)
| +--- com.google.cloud:google-cloud-firestore:3.7.0
| | +--- com.google.cloud:google-cloud-core-grpc:2.8.22
| | +--- io.grpc:grpc-core:1.50.1 (*)
| | +--- com.google.android:annotations:4.1.1.4
| | +--- org.codehaus.mojo:animal-sniffer-annotations:1.22
| | +--- io.perfmark:perfmark-api:0.25.0
| | +--- com.google.http-client:google-http-client:1.42.2 (*)
| | +--- org.apache.httpcomponents:httpclient:4.5.13 (*)
| | +--- commons-logging:commons-logging:1.2
| | +--- commons-codec:commons-codec:1.15
| | +--- org.apache.httpcomponents:httpcore:4.4.15
| | +--- io.opencensus:opencensus-contrib-http-util:0.31.1 (*)
| | +--- com.google.api.grpc:proto-google-cloud-firestore-v1:3.7.0
| | | +--- javax.annotation:javax.annotation-api:1.3.2
| | | +--- com.google.auto.value:auto-value-annotations:1.10
| | | +--- com.google.guava:failureaccess:1.0.1
| | | +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
| | | +--- com.google.code.findbugs:jsr305:3.0.2
| | | +--- org.checkerframework:checker-qual:3.26.0
| | | +--- com.google.errorprone:error_prone_annotations:2.16
| | | \--- com.google.j2objc:j2objc-annotations:1.3
| | +--- com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.7.0
| | | +--- com.google.api:api-common:2.2.1 (*)
| | | +--- javax.annotation:javax.annotation-api:1.3.2
| | | +--- com.google.auto.value:auto-value-annotations:1.10
| | | +--- com.google.api.grpc:proto-google-common-protos:2.9.6 (*)
| | | +--- com.google.guava:guava:31.1-jre (*)
| | | +--- com.google.guava:failureaccess:1.0.1
| | | +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
| | | +--- com.google.code.findbugs:jsr305:3.0.2
| | | +--- org.checkerframework:checker-qual:3.26.0
| | | +--- com.google.errorprone:error_prone_annotations:2.16
| | | \--- com.google.j2objc:j2objc-annotations:1.3
| | +--- com.google.auto.value:auto-value-annotations:1.10
| | +--- io.opencensus:opencensus-contrib-grpc-util:0.31.1
| | +--- com.google.code.findbugs:jsr305:3.0.2
| | +--- com.google.api:api-common:2.2.1 (*)
| | +--- javax.annotation:javax.annotation-api:1.3.2
| | +--- io.grpc:grpc-protobuf:1.50.1 (*)
| | +--- io.grpc:grpc-protobuf-lite:1.50.1 (*)
| | +--- io.grpc:grpc-context:1.50.1
| | +--- com.google.protobuf:protobuf-java:3.21.8
| | +--- com.google.api.grpc:proto-google-common-protos:2.9.6 (*)
| | +--- com.google.api:gax:2.19.4
| | +--- io.grpc:grpc-api:1.50.1 (*)
| | +--- com.google.errorprone:error_prone_annotations:2.16
| | +--- com.google.api:gax-grpc:2.19.4
| | +--- io.grpc:grpc-alts:1.50.1
| | +--- io.grpc:grpc-grpclb:1.50.1
| | +--- org.conscrypt:conscrypt-openjdk-uber:2.5.2
| | +--- io.grpc:grpc-auth:1.50.1
| | +--- io.grpc:grpc-netty-shaded:1.50.1 (*)
| | +--- io.grpc:grpc-googleapis:1.50.1
| | +--- io.grpc:grpc-xds:1.50.1
| | +--- io.opencensus:opencensus-proto:0.2.0
| | +--- io.grpc:grpc-services:1.50.1 (*)
| | +--- com.google.re2j:re2j:1.6
| | +--- com.google.api:gax-httpjson:0.104.4
| | +--- com.google.guava:guava:31.1-jre (*)
| | +--- com.google.guava:failureaccess:1.0.1
| | +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
| | +--- org.checkerframework:checker-qual:3.26.0
| | +--- com.google.j2objc:j2objc-annotations:1.3
| | +--- org.threeten:threetenbp:1.6.3
| | +--- io.grpc:grpc-stub:1.50.1 (*)
| | +--- io.opencensus:opencensus-api:0.31.1 (*)
| | +--- com.google.auth:google-auth-library-credentials:1.12.1
| | +--- com.google.cloud:google-cloud-core:2.8.22
| | +--- com.google.api.grpc:proto-google-iam-v1:1.6.4
| | +--- com.google.auth:google-auth-library-oauth2-http:1.12.1 (*)
| | +--- com.google.http-client:google-http-client-gson:1.42.2 (*)
| | +--- com.google.code.gson:gson:2.9.1 -> 2.9.0
| | \--- com.google.protobuf:protobuf-java-util:3.21.8 (*)
| +--- com.google.guava:guava:31.1-jre (*)
| +--- org.slf4j:slf4j-api:2.0.3 -> 1.7.36
| +--- io.netty:netty-codec-http:4.1.84.Final -> 4.1.79.Final (*)
| +--- io.netty:netty-handler:4.1.84.Final -> 4.1.79.Final (*)
| \--- io.netty:netty-transport:4.1.84.Final -> 4.1.79.Final (*)
solution
1. graddle를 통해 admin sdk의 버전을 낯추어 netty의 버전도 함께 낮추어준다.
implementation("com.google.firebase:firebase-admin:6.8.0")
2.graddle를 통해 netty의 버전은 강제로 낯추어 준다
implementation(enforcedPlatform("io.grpc:grpc-netty-shaded:1.33.0"))