Too fast “Send” button click =)

You can find snapshot artifacts here:
https://repository.apache.org/content/repositories/snapshots/org/apache/beam/beam-sdks-java-io-amazon-web-services2/2.27.0-SNAPSHOT/

> On 15 Dec 2020, at 13:14, Alexey Romanenko <[email protected]> wrote:
> 
> Quick update on this.
> 
> We have fixed an issue with AwsCredentialsProvider serialisation [1] for AWS 
> v2 IOs (well, why it’s not serialisable by default it’s a different question) 
> in 2.27.0.
> Since it’s not yet released, feel free to test it with snapshot artifacts. 
> 
> [1] https://issues.apache.org/jira/browse/BEAM-11016 
> <https://issues.apache.org/jira/browse/BEAM-11016>
> 
>> On 6 Oct 2020, at 23:25, [email protected] 
>> <mailto:[email protected]> wrote:
>> 
>> Yep, same stacktrace.  NPE originating from line 41 of 
>> SqsUnboundedSource.java.
>> 
>> I'll see about getting a remote debugger attached to the process.
>> 
>> Oct 6, 2020, 14:06 by [email protected] 
>> <mailto:[email protected]>:
>> Hmm, do you have the same stack trace in this case?
>> 
>> Can you debug it in runtime and make sure that read.sqsClientProvider() 
>> returns null in SqsUnboundedSource(Read)? I’m curious if all calls to 
>> SqsUnboundedSource(Read) were done in the same JVM.
>> 
>>> On 6 Oct 2020, at 22:14, [email protected] 
>>> <mailto:[email protected]> wrote:
>>> 
>>> To test this, I tried a workaround of an implementation of 
>>> AwsCredentialsProvider that also implemented Serializable.  The 
>>> resolveCredentials method of this class would call that static create 
>>> function of DefaultCredentialsProvider and forward the task to that.  There 
>>> are no fields in the class that should actually need to be serialized.
>>> 
>>> However, this approach is failing in the exact same manner.  I suspect 
>>> something else might be the culprit here.
>>> 
>>> Oct 5, 2020, 08:56 by [email protected] 
>>> <mailto:[email protected]>:
>>> Seems like there is an issue with non-serialisable AwsCredentialsProvider 
>>> as a member of BasicSqsClientProvider (which is Serializable).
>>> 
>>>> On 2 Oct 2020, at 20:11, [email protected] 
>>>> <mailto:[email protected]> wrote:
>>>> 
>>>> The app itself is developed in Clojure, but here's the gist of how it's 
>>>> getting configured:
>>>> 
>>>>     AwsCredentialsProvider credProvider = 
>>>> EnvrionmentVariableCredentialsProvider.create();
>>>>     
>>>>     pipeline.apply(
>>>>       SqsIO.read()
>>>>         .withQueueUrl(url)
>>>>         .withSqsClientProvider(credProvider, region, endpoint));
>>>> 
>>>> Oct 1, 2020, 08:48 by [email protected] 
>>>> <mailto:[email protected]>:
>>>> Could you send a code snippet of your pipeline with SqsIO v2 Read 
>>>> transform configuration?
>>>> On 30 Sep 2020, at 22:56, [email protected] 
>>>> <mailto:[email protected]> wrote:
>>>> 
>>>> I've been attempting to migrate to the AWS2 SDK (version 2.24.0) on Apache 
>>>> Spark 2.4.7. However,
>>>> when switching over to the new API and running it I keep getting the 
>>>> following exceptions:
>>>> 
>>>> 2020-09-30 20:38:32,428 ERROR streaming.StreamingContext: Error starting 
>>>> the context, marking it as stopped
>>>> org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 
>>>> in stage 2.0 failed 4 times, most recent failure: Lost task 0.3 in stage 
>>>> 2.0 (TID 6, 10.42.180.18, executor 0): java.lang.NullPointerException
>>>> at 
>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedSource.lambda$new$e39e7721$1(SqsUnboundedSource.java:41)
>>>> at 
>>>> org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Suppliers$MemoizingSupplier.get(Suppliers.java:129)
>>>> at 
>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedSource.getSqs(SqsUnboundedSource.java:74)
>>>> at 
>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedReader.pull(SqsUnboundedReader.java:165)
>>>> at 
>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedReader.advance(SqsUnboundedReader.java:108)
>>>> at 
>>>> org.apache.beam.runners.spark.io.MicrobatchSource$Reader.advanceWithBackoff(MicrobatchSource.java:246)
>>>> at 
>>>> org.apache.beam.runners.spark.io.MicrobatchSource$Reader.start(MicrobatchSource.java:224)
>>>> at 
>>>> org.apache.beam.runners.spark.stateful.StateSpecFunctions$1.apply(StateSpecFunctions.java:168)
>>>> at 
>>>> org.apache.beam.runners.spark.stateful.StateSpecFunctions$1.apply(StateSpecFunctions.java:107)
>>>> at 
>>>> org.apache.spark.streaming.StateSpec$$anonfun$1.apply(StateSpec.scala:181)
>>>> at 
>>>> org.apache.spark.streaming.StateSpec$$anonfun$1.apply(StateSpec.scala:180)
>>>> at 
>>>> org.apache.spark.streaming.rdd.MapWithStateRDDRecord$$anonfun$updateRecordWithData$1.apply(MapWithStateRDD.scala:57)
>>>> 
>>>> Examining the source of SqsUnboundedSource reveals a lambda where it's 
>>>> trying to chain a few references:
>>>> read.sqsClientProvider().getSqsClient()
>>>> 
>>>> Which is odd as I explicitly set the client provider on the read 
>>>> transform. This was working well enough with the old SqsIO API to connect 
>>>> and process messages off the queue.
>>>> 
>>>> Any thoughts on why this might be happening? Or avenues to pursue in 
>>>> debugging this?
>>>> 
>>>> Thanks.
>>>> 
>>> 
>>> 
>> 
>> 
> 

Reply via email to