Skip to content

Commit

Permalink
Fix streaming APIs' Err method closing stream (#2882)
Browse files Browse the repository at this point in the history
Fixes calling the Err method on SDK's Amazon Kinesis's SubscribeToShared
and Amazon S3's SelectObjectContent response EventStream members closing
the stream. This would cause unexpected read errors, or early
termination of the streams. Only the Close method of the streaming
members will close the streams.

Improved generated unit and integration tests for streaming API
operations.

Related to #2769
  • Loading branch information
jasdel committed Oct 21, 2019
1 parent 5c82ee7 commit 1d5d147
Show file tree
Hide file tree
Showing 14 changed files with 183 additions and 38 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG_PENDING.md
Expand Up @@ -3,3 +3,7 @@
### SDK Enhancements

### SDK Bugs
* `service/s3`,`service/kinesis`: Fix streaming APIs' Err method closing stream ([#2882](https://github.com/aws/aws-sdk-go/pull/2882))
* Fixes calling the Err method on SDK's Amazon Kinesis's SubscribeToShared and Amazon S3's SelectObjectContent response EventStream members closing the stream. This would cause unexpected read errors, or early termination of the streams. Only the Close method of the streaming members will close the streams.
* Related to [#2769](https://github.com/aws/aws-sdk-go/issues/2769)

8 changes: 4 additions & 4 deletions private/model/api/codegentest/service/restjsonservice/api.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions private/model/api/codegentest/service/restxmlservice/api.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions private/model/api/codegentest/service/rpcservice/api.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 15 additions & 3 deletions private/model/api/eventstream.go
Expand Up @@ -208,7 +208,7 @@ func setupEventStream(topShape *Shape) *EventStream {
eventRef.Shape.EventFor = append(eventRef.Shape.EventFor, eventStream)

// Exceptions and events are two different lists to allow the SDK
// to easly generate code with the two handled differently.
// to easily generate code with the two handled differently.
event := &Event{
Name: eventRefName,
Shape: eventRef.Shape,
Expand Down Expand Up @@ -335,6 +335,8 @@ func (es *{{ $.ShapeName }}) Close() (err error) {
es.Writer.Close()
{{ end -}}
es.StreamCloser.Close()
return es.Err()
}
Expand All @@ -353,8 +355,6 @@ func (es *{{ $.ShapeName }}) Err() error {
}
{{ end -}}
es.StreamCloser.Close()
return nil
}
Expand Down Expand Up @@ -974,6 +974,18 @@ func (c *loopReader) Read(p []byte) (int, error) {
t.Fatalf("expect no error got, %v", err)
}
{{ if gt (len $.Inbound.Events) 0 -}}
// Assert calling Err before close does not close the stream.
resp.{{ $esMemberName }}.Err()
select {
case _, ok := <-resp.{{ $esMemberName }}.Events():
if !ok {
t.Fatalf("expect stream not to be closed, but was")
}
default:
}
{{- end }}
resp.{{ $esMemberName }}.Close()
<-resp.{{ $esMemberName }}.Events()
Expand Down
4 changes: 2 additions & 2 deletions service/kinesis/api.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions service/kinesis/eventstream_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions service/s3/api.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 1d5d147

Please sign in to comment.