Skip to content

[Bug]: LocalSpannerIO package namespace conflict with Beam's SpannerIO  #1362

@Abacn

Description

@Abacn

Related Template(s)

V1

Template Version

N/A

What happened?

V1 templates use LocalSpannerIO under Beam's namespace: https://github.com/GoogleCloudPlatform/DataflowTemplates/tree/main/v1/src/main/java/org/apache/beam/sdk/io/gcp/spanner and depends on beam-sdks-java-io-google-cloud-platform as well, causing unpredictable class conflict.

It happens in the 2.55.0 release validation: #1361 SpannerIO V1 templates failed with error

Caused by: java.lang.NoSuchMethodError: 'org.apache.beam.sdk.options.ValueProvider org.apache.beam.sdk.io.gcp.spanner.SpannerConfig.getCredentials()'
	at org.apache.beam.sdk.io.gcp.spanner.SpannerAccessor.buildSpannerOptions(SpannerAccessor.java:228)
	at org.apache.beam.sdk.io.gcp.spanner.SpannerAccessor.createAndConnect(SpannerAccessor.java:237)
	at org.apache.beam.sdk.io.gcp.spanner.SpannerAccessor.getOrCreate(SpannerAccessor.java:94)
	at org.apache.beam.sdk.io.gcp.spanner.LocalSpannerAccessor.getOrCreate(LocalSpannerAccessor.java:57)
	at com.google.cloud.teleport.templates.common.SpannerConverters$CreateTransactionFnWithTimestamp.setup(SpannerConverters.java:766

because SpannerAccessor was picked from beam-io-gcp but SpannerConfig was picked from v1 at run time, causing NoSuchMethodError.

We should either relocate the namespace of LocalSpannerIO or migrate to Beam's SpannerIO

Relevant log output

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions