Search code examples
javascalagoogle-cloud-platformgoogle-cloud-dataflowgoogle-cloud-spanner

Dataflow with Cloud Spanner: java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured


I have a dataflow job that writes results to a Cloud Spanner table. Everything works fine when I run the job locally but running it on Dataflow gives the following error -

java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured.
    io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:174)
    io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:151)
    io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:139)
    io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:109)
    com.google.cloud.spanner.SpannerOptions$NettyRpcChannelFactory.newSslContext(SpannerOptions.java:289)
    com.google.cloud.spanner.SpannerOptions$NettyRpcChannelFactory.newChannel(SpannerOptions.java:278)
    com.google.cloud.spanner.SpannerOptions.createChannel(SpannerOptions.java:252)
    com.google.cloud.spanner.SpannerOptions.createChannels(SpannerOptions.java:239)
    com.google.cloud.spanner.SpannerOptions.<init>(SpannerOptions.java:88)
    com.google.cloud.spanner.SpannerOptions.<init>(SpannerOptions.java:43)
    com.google.cloud.spanner.SpannerOptions$Builder.build(SpannerOptions.java:179)

I get this error when trying to create SpannerOptions instance like so -

val options: SpannerOptions = SpannerOptions.newBuilder().build()

I saw this question but excluding netty-all like below does not help.

libraryDependencies ++= libraries(
  apache_beam,
  circe,
  scalatest % Test,
  junit % Test,
  hamcrest % Test
).map(_.exclude("io.netty", "netty-all"))

What can I do to fix this?


Solution

  • Fixed by matching google-cloud-spanner version with the one specified in Apache Beam's pom.xml.