Skip to content

Commit 07b1a47

Browse files
committed
Revert "Handle S3 200 errors for all operations (#3038)"
This reverts commit 3bfe59a.
1 parent 3bfe59a commit 07b1a47

File tree

3 files changed

+96
-116
lines changed

3 files changed

+96
-116
lines changed

gems/aws-sdk-s3/CHANGELOG.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
Unreleased Changes
22
------------------
33

4-
* Issue - Handle 200 errors for all S3 operations that do not have streaming responses.
5-
64
1.152.0 (2024-06-05)
75
------------------
86

gems/aws-sdk-s3/lib/aws-sdk-s3/plugins/http_200_errors.rb

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,39 +15,21 @@ class Handler < Seahorse::Client::Handler
1515

1616
def call(context)
1717
@handler.call(context).on(200) do |response|
18-
return response if streaming_output?(context.operation.output)
19-
20-
error = check_for_error(context)
21-
return response unless error
22-
23-
context.http_response.status_code = 500
24-
response.data = nil
25-
response.error = error
26-
end
27-
end
28-
29-
private
30-
31-
def streaming_output?(output)
32-
if (payload = output[:payload_member]) # checking ref and shape
33-
payload['streaming'] || payload.shape['streaming']
34-
else
35-
false
18+
if error = check_for_error(context)
19+
context.http_response.status_code = 500
20+
response.data = nil
21+
response.error = error
22+
end
3623
end
3724
end
3825

39-
def members_in_body?(output)
40-
output.shape.members.any? { |_, k| k.location.nil? }
41-
end
42-
4326
def check_for_error(context)
4427
xml = context.http_response.body_contents
45-
if xml.match(/\?>\s*<Error>/)
28+
if xml.match(/<Error>/)
4629
error_code = xml.match(/<Code>(.+?)<\/Code>/)[1]
4730
error_message = xml.match(/<Message>(.+?)<\/Message>/)[1]
4831
S3::Errors.error_class(error_code).new(context, error_message)
49-
elsif members_in_body?(context.operation.output) && !xml.match(/<\w/)
50-
# Must have a body member and have the start of an XML Tag
32+
elsif !xml.match(/<\w/) # Must have the start of an XML Tag
5133
# Other incomplete xml bodies will result in XML ParsingError
5234
Seahorse::Client::NetworkingError.new(
5335
S3::Errors
@@ -58,7 +40,15 @@ def check_for_error(context)
5840
end
5941
end
6042

61-
handler(Handler, step: :sign)
43+
handler(
44+
Handler,
45+
step: :sign,
46+
operations: [
47+
:complete_multipart_upload,
48+
:copy_object,
49+
:upload_part_copy,
50+
]
51+
)
6252
end
6353
end
6454
end

gems/aws-sdk-s3/spec/client_spec.rb

Lines changed: 80 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,8 @@ module S3
4545
'rw0nS41rawnLDzkf+PKXmmt/uEi4bzvNMr72o=',
4646
'x-amz-request-id' => 'BE9C18E622969B17'
4747
},
48-
body: <<-XML)
49-
<?xml version="1.0" encoding="UTF-8"?>
50-
<ListAllMyBucketsResult xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">
51-
<Buckets>
52-
<Bucket>
53-
<Name>aws-sdk-ruby</Name>
54-
</Bucket>
55-
</Buckets>
56-
</ListAllMyBucketsResult>
57-
XML
48+
body: ''
49+
)
5850
Seahorse::Client::Response.new(context: context)
5951
end
6052
resp = s3.list_buckets
@@ -431,14 +423,14 @@ module S3
431423
status_code: 409,
432424
headers: {},
433425
body: <<-XML.strip
434-
<?xml version="1.0" encoding="UTF-8"?>
435-
<Error>
436-
<Code>BucketNotEmpty</Code>
437-
<Message>The bucket you tried to delete is not empty</Message>
438-
<BucketName>aws-sdk</BucketName>
439-
<RequestId>740BE6AB575EACED</RequestId>
440-
<HostId>MQVg1RMI+d93Hps1E8qpIuDb9Gd2TzkDhm0wE40981DjxSHP1UfLBB7qOAlwAqJB</HostId>
441-
</Error>
426+
<?xml version="1.0" encoding="UTF-8"?>
427+
<Error>
428+
<Code>BucketNotEmpty</Code>
429+
<Message>The bucket you tried to delete is not empty</Message>
430+
<BucketName>aws-sdk</BucketName>
431+
<RequestId>740BE6AB575EACED</RequestId>
432+
<HostId>MQVg1RMI+d93Hps1E8qpIuDb9Gd2TzkDhm0wE40981DjxSHP1UfLBB7qOAlwAqJB</HostId>
433+
</Error>
442434
XML
443435
)
444436
Seahorse::Client::Response.new(context: context)
@@ -460,8 +452,8 @@ module S3
460452
status_code: 200,
461453
headers: {},
462454
body: <<-XML.strip
463-
<?xml version="1.0" encoding="UTF-8"?>
464-
<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">EU</LocationConstraint>
455+
<?xml version="1.0" encoding="UTF-8"?>
456+
<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">EU</LocationConstraint>
465457
XML
466458
)
467459
Seahorse::Client::Response.new(context: context)
@@ -477,8 +469,8 @@ module S3
477469
status_code: 200,
478470
headers: {},
479471
body: <<-XML.strip
480-
<?xml version="1.0" encoding="UTF-8"?>
481-
<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/"/>
472+
<?xml version="1.0" encoding="UTF-8"?>
473+
<LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/"/>
482474
XML
483475
)
484476
Seahorse::Client::Response.new(context: context)
@@ -512,19 +504,19 @@ module S3
512504
status_code: 200,
513505
headers: {},
514506
body: <<-XML.strip)
515-
<?xml version="1.0" encoding="UTF-8"?>
516-
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
517-
<Prefix>a%26</Prefix>
518-
<Delimiter>b%26</Delimiter>
519-
<Marker>c%26</Marker>
520-
<NextMarker>d%26</NextMarker>
521-
<Contents>
522-
<Key>e%26</Key>
523-
</Contents>
524-
<CommonPrefixes>
525-
<Prefix>f%26</Prefix>
526-
</CommonPrefixes>
527-
</ListBucketResult>
507+
<?xml version="1.0" encoding="UTF-8"?>
508+
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
509+
<Prefix>a%26</Prefix>
510+
<Delimiter>b%26</Delimiter>
511+
<Marker>c%26</Marker>
512+
<NextMarker>d%26</NextMarker>
513+
<Contents>
514+
<Key>e%26</Key>
515+
</Contents>
516+
<CommonPrefixes>
517+
<Prefix>f%26</Prefix>
518+
</CommonPrefixes>
519+
</ListBucketResult>
528520
XML
529521
Seahorse::Client::Response.new(context: context)
530522
end
@@ -549,12 +541,12 @@ module S3
549541
status_code: 200,
550542
headers: {},
551543
body: <<-XML.strip)
552-
<?xml version="1.0" encoding="UTF-8"?>
553-
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
554-
<Contents>
555-
<Key>a%26</Key>
556-
</Contents>
557-
</ListBucketResult>
544+
<?xml version="1.0" encoding="UTF-8"?>
545+
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
546+
<Contents>
547+
<Key>a%26</Key>
548+
</Contents>
549+
</ListBucketResult>
558550
XML
559551
Seahorse::Client::Response.new(context: context)
560552
end
@@ -570,22 +562,22 @@ module S3
570562
status_code: 200,
571563
headers: {},
572564
body: <<-XML.strip)
573-
<?xml version="1.0" encoding="UTF-8"?>
574-
<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01">
575-
<Prefix>a%26</Prefix>
576-
<Delimiter>b%26</Delimiter>
577-
<KeyMarker>c%26</KeyMarker>
578-
<NextKeyMarker>d%26</NextKeyMarker>
579-
<Version>
580-
<Key>e%26</Key>
581-
</Version>
582-
<DeleteMarker>
583-
<Key>f%26</Key>
584-
</DeleteMarker>
585-
<CommonPrefixes>
586-
<Prefix>g%26</Prefix>
587-
</CommonPrefixes>
588-
</ListVersionsResult>
565+
<?xml version="1.0" encoding="UTF-8"?>
566+
<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01">
567+
<Prefix>a%26</Prefix>
568+
<Delimiter>b%26</Delimiter>
569+
<KeyMarker>c%26</KeyMarker>
570+
<NextKeyMarker>d%26</NextKeyMarker>
571+
<Version>
572+
<Key>e%26</Key>
573+
</Version>
574+
<DeleteMarker>
575+
<Key>f%26</Key>
576+
</DeleteMarker>
577+
<CommonPrefixes>
578+
<Prefix>g%26</Prefix>
579+
</CommonPrefixes>
580+
</ListVersionsResult>
589581
XML
590582
Seahorse::Client::Response.new(context: context)
591583
end
@@ -610,19 +602,19 @@ module S3
610602
status_code: 200,
611603
headers: {},
612604
body: <<-XML.strip)
613-
<?xml version="1.0" encoding="UTF-8"?>
614-
<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01">
615-
<Prefix>a%26</Prefix>
616-
<Delimiter>b%26</Delimiter>
617-
<KeyMarker>c%26</KeyMarker>
618-
<NextKeyMarker>d%26</NextKeyMarker>
619-
<Upload>
620-
<Key>e%26</Key>
621-
</Upload>
622-
<CommonPrefixes>
623-
<Prefix>f%26</Prefix>
624-
</CommonPrefixes>
625-
</ListVersionsResult>
605+
<?xml version="1.0" encoding="UTF-8"?>
606+
<ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01">
607+
<Prefix>a%26</Prefix>
608+
<Delimiter>b%26</Delimiter>
609+
<KeyMarker>c%26</KeyMarker>
610+
<NextKeyMarker>d%26</NextKeyMarker>
611+
<Upload>
612+
<Key>e%26</Key>
613+
</Upload>
614+
<CommonPrefixes>
615+
<Prefix>f%26</Prefix>
616+
</CommonPrefixes>
617+
</ListVersionsResult>
626618
XML
627619
Seahorse::Client::Response.new(context: context)
628620
end
@@ -694,17 +686,17 @@ module S3
694686
status_code: 200,
695687
headers: {},
696688
body: <<-XML)
697-
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
698-
<Contents>
699-
<Key>prefix+suffix</Key>
700-
</Contents>
701-
<Contents>
702-
<Key>prefix%2Bsuffix</Key>
703-
</Contents>
704-
<Contents>
705-
<Key>prefix%20suffix</Key>
706-
</Contents>
707-
</ListBucketResult>
689+
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
690+
<Contents>
691+
<Key>prefix+suffix</Key>
692+
</Contents>
693+
<Contents>
694+
<Key>prefix%2Bsuffix</Key>
695+
</Contents>
696+
<Contents>
697+
<Key>prefix%20suffix</Key>
698+
</Contents>
699+
</ListBucketResult>
708700
XML
709701
Seahorse::Client::Response.new(context: context)
710702
end
@@ -789,13 +781,13 @@ module S3
789781
client.handle(step: :send) do |context|
790782
context.http_response.signal_headers(200, {})
791783
context.http_response.signal_data(<<-XML.strip)
792-
<?xml version="1.0" encoding="UTF-8"?>
793-
<Error>
794-
<Code>InternalError</Code>
795-
<Message>We encountered an internal error. Please try again.</Message>
796-
<RequestId>656c76696e6727732072657175657374</RequestId>
797-
<HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>
798-
</Error>
784+
<?xml version="1.0" encoding="UTF-8"?>
785+
<Error>
786+
<Code>InternalError</Code>
787+
<Message>We encountered an internal error. Please try again.</Message>
788+
<RequestId>656c76696e6727732072657175657374</RequestId>
789+
<HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>
790+
</Error>
799791
XML
800792
context.http_response.signal_done
801793
Seahorse::Client::Response.new(context: context)

0 commit comments

Comments
 (0)