Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix streaming APIs' Err method closing stream #2882

Merged
merged 3 commits into from Oct 21, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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.