aws-sdk-core 2.3.23 → 3.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/VERSION +1 -0
- data/ca-bundle.crt +3615 -3541
- data/lib/aws-sdk-core.rb +106 -404
- data/lib/aws-sdk-core/arn.rb +77 -0
- data/lib/aws-sdk-core/arn_parser.rb +38 -0
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +101 -0
- data/lib/aws-sdk-core/async_client_stubs.rb +80 -0
- data/lib/aws-sdk-core/binary.rb +6 -0
- data/lib/aws-sdk-core/binary/decode_handler.rb +56 -0
- data/lib/aws-sdk-core/binary/encode_handler.rb +32 -0
- data/lib/aws-sdk-core/binary/event_builder.rb +122 -0
- data/lib/aws-sdk-core/binary/event_parser.rb +134 -0
- data/lib/aws-sdk-core/binary/event_stream_decoder.rb +62 -0
- data/lib/aws-sdk-core/binary/event_stream_encoder.rb +53 -0
- data/lib/aws-sdk-core/client_side_monitoring/publisher.rb +49 -0
- data/lib/aws-sdk-core/client_side_monitoring/request_metrics.rb +197 -0
- data/lib/aws-sdk-core/client_stubs.rb +73 -10
- data/lib/aws-sdk-core/credential_provider.rb +0 -29
- data/lib/aws-sdk-core/credential_provider_chain.rb +56 -6
- data/lib/aws-sdk-core/deprecations.rb +16 -10
- data/lib/aws-sdk-core/ecs_credentials.rb +14 -10
- data/lib/aws-sdk-core/endpoint_cache.rb +191 -0
- data/lib/aws-sdk-core/errors.rb +221 -11
- data/lib/aws-sdk-core/event_emitter.rb +62 -0
- data/lib/aws-sdk-core/ini_parser.rb +41 -0
- data/lib/aws-sdk-core/instance_profile_credentials.rb +133 -42
- data/lib/aws-sdk-core/json.rb +9 -10
- data/lib/aws-sdk-core/json/builder.rb +4 -2
- data/lib/aws-sdk-core/json/error_handler.rb +19 -2
- data/lib/aws-sdk-core/json/handler.rb +22 -3
- data/lib/aws-sdk-core/json/parser.rb +1 -1
- data/lib/aws-sdk-core/log/formatter.rb +7 -1
- data/lib/aws-sdk-core/log/param_filter.rb +4 -3
- data/lib/aws-sdk-core/pageable_response.rb +1 -0
- data/lib/aws-sdk-core/pager.rb +30 -25
- data/lib/aws-sdk-core/param_converter.rb +3 -3
- data/lib/aws-sdk-core/param_validator.rb +60 -26
- data/lib/aws-sdk-core/plugins/api_key.rb +52 -0
- data/lib/aws-sdk-core/plugins/apig_authorizer_token.rb +30 -0
- data/lib/aws-sdk-core/plugins/apig_credentials_configuration.rb +34 -0
- data/lib/aws-sdk-core/plugins/apig_user_agent.rb +37 -0
- data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +280 -0
- data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +84 -0
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +62 -0
- data/lib/aws-sdk-core/plugins/endpoint_discovery.rb +160 -0
- data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +63 -0
- data/lib/aws-sdk-core/plugins/event_stream_configuration.rb +30 -0
- data/lib/aws-sdk-core/plugins/global_configuration.rb +19 -10
- data/lib/aws-sdk-core/plugins/helpful_socket_errors.rb +41 -0
- data/lib/aws-sdk-core/plugins/idempotency_token.rb +36 -0
- data/lib/aws-sdk-core/plugins/invocation_id.rb +33 -0
- data/lib/aws-sdk-core/plugins/jsonvalue_converter.rb +29 -0
- data/lib/aws-sdk-core/plugins/logging.rb +18 -18
- data/lib/aws-sdk-core/plugins/param_converter.rb +9 -5
- data/lib/aws-sdk-core/plugins/param_validator.rb +8 -5
- data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +10 -0
- data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -1
- data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +13 -12
- data/lib/aws-sdk-core/plugins/protocols/query.rb +2 -2
- data/lib/aws-sdk-core/plugins/regional_endpoint.rb +48 -19
- data/lib/aws-sdk-core/plugins/response_paging.rb +5 -18
- data/lib/aws-sdk-core/plugins/retry_errors.rb +102 -24
- data/lib/aws-sdk-core/plugins/signature_v2.rb +51 -0
- data/lib/aws-sdk-core/plugins/signature_v4.rb +141 -0
- data/lib/aws-sdk-core/plugins/stub_responses.rb +35 -18
- data/lib/aws-sdk-core/plugins/transfer_encoding.rb +53 -0
- data/lib/aws-sdk-core/plugins/user_agent.rb +23 -10
- data/lib/aws-sdk-core/process_credentials.rb +80 -0
- data/lib/aws-sdk-core/query.rb +5 -0
- data/lib/aws-sdk-core/query/ec2_param_builder.rb +9 -3
- data/lib/aws-sdk-core/query/handler.rb +20 -16
- data/lib/aws-sdk-core/query/param_builder.rb +10 -4
- data/lib/aws-sdk-core/refreshing_credentials.rb +1 -1
- data/lib/aws-sdk-core/resources/collection.rb +121 -0
- data/lib/aws-sdk-core/rest.rb +10 -0
- data/lib/aws-sdk-core/rest/handler.rb +1 -0
- data/lib/aws-sdk-core/rest/request/builder.rb +2 -1
- data/lib/aws-sdk-core/rest/request/endpoint.rb +11 -66
- data/lib/aws-sdk-core/rest/request/headers.rb +20 -1
- data/lib/aws-sdk-core/rest/request/querystring_builder.rb +103 -0
- data/lib/aws-sdk-core/rest/response/body.rb +14 -1
- data/lib/aws-sdk-core/rest/response/headers.rb +9 -0
- data/lib/aws-sdk-core/rest/response/parser.rb +18 -14
- data/lib/aws-sdk-core/shared_config.rb +451 -0
- data/lib/aws-sdk-core/shared_credentials.rb +16 -53
- data/lib/aws-sdk-core/structure.rb +22 -13
- data/lib/aws-sdk-core/stubbing/data_applicator.rb +1 -1
- data/lib/aws-sdk-core/stubbing/empty_stub.rb +10 -3
- data/lib/aws-sdk-core/stubbing/protocols/api_gateway.rb +8 -0
- data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +1 -1
- data/lib/aws-sdk-core/stubbing/protocols/rest.rb +99 -1
- data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +5 -1
- data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +9 -5
- data/lib/aws-sdk-core/stubbing/stub_data.rb +16 -3
- data/lib/aws-sdk-core/util.rb +66 -0
- data/lib/aws-sdk-core/waiters.rb +3 -0
- data/lib/aws-sdk-core/waiters/poller.rb +5 -7
- data/lib/aws-sdk-core/waiters/waiter.rb +3 -2
- data/lib/aws-sdk-core/xml.rb +9 -0
- data/lib/aws-sdk-core/xml/builder.rb +11 -5
- data/lib/aws-sdk-core/xml/error_handler.rb +27 -5
- data/lib/aws-sdk-core/xml/parser.rb +1 -11
- data/lib/aws-sdk-core/xml/parser/engines/ox.rb +5 -1
- data/lib/aws-sdk-core/xml/parser/frame.rb +6 -6
- data/lib/aws-sdk-sts.rb +45 -0
- data/lib/aws-sdk-sts/client.rb +2156 -0
- data/lib/aws-sdk-sts/client_api.rb +336 -0
- data/lib/aws-sdk-sts/customizations.rb +2 -0
- data/lib/aws-sdk-sts/errors.rb +142 -0
- data/lib/aws-sdk-sts/plugins/sts_regional_endpoints.rb +32 -0
- data/lib/aws-sdk-sts/presigner.rb +67 -0
- data/lib/aws-sdk-sts/resource.rb +23 -0
- data/lib/aws-sdk-sts/types.rb +1504 -0
- data/lib/seahorse.rb +60 -60
- data/lib/seahorse/client/async_base.rb +50 -0
- data/lib/seahorse/client/async_response.rb +62 -0
- data/lib/seahorse/client/base.rb +5 -9
- data/lib/seahorse/client/configuration.rb +10 -2
- data/lib/seahorse/client/events.rb +1 -1
- data/lib/seahorse/client/h2/connection.rb +246 -0
- data/lib/seahorse/client/h2/handler.rb +151 -0
- data/lib/seahorse/client/handler_list_entry.rb +2 -2
- data/lib/seahorse/client/http/async_response.rb +42 -0
- data/lib/seahorse/client/http/response.rb +13 -8
- data/lib/seahorse/client/logging/formatter.rb +7 -1
- data/lib/seahorse/client/logging/handler.rb +2 -0
- data/lib/seahorse/client/net_http/connection_pool.rb +46 -28
- data/lib/seahorse/client/net_http/handler.rb +17 -3
- data/lib/seahorse/client/net_http/patches.rb +9 -1
- data/lib/seahorse/client/networking_error.rb +28 -0
- data/lib/seahorse/client/plugin.rb +67 -6
- data/lib/seahorse/client/plugin_list.rb +3 -1
- data/lib/seahorse/client/plugins/content_length.rb +7 -2
- data/lib/seahorse/client/plugins/endpoint.rb +14 -10
- data/lib/seahorse/client/plugins/h2.rb +64 -0
- data/lib/seahorse/client/plugins/logging.rb +17 -19
- data/lib/seahorse/client/plugins/net_http.rb +23 -15
- data/lib/seahorse/client/plugins/raise_response_errors.rb +4 -4
- data/lib/seahorse/client/plugins/response_target.rb +10 -1
- data/lib/seahorse/client/request_context.rb +5 -0
- data/lib/seahorse/client/response.rb +9 -20
- data/lib/seahorse/model/api.rb +37 -0
- data/lib/seahorse/model/authorizer.rb +21 -0
- data/lib/seahorse/model/operation.rb +20 -0
- data/lib/seahorse/model/shapes.rb +44 -2
- data/lib/seahorse/util.rb +1 -21
- metadata +127 -360
- data/apis/acm/2015-12-08/api-2.json +0 -495
- data/apis/acm/2015-12-08/examples-1.json +0 -5
- data/apis/acm/2015-12-08/paginators-1.json +0 -10
- data/apis/apigateway/2015-07-09/api-2.json +0 -3347
- data/apis/apigateway/2015-07-09/examples-1.json +0 -5
- data/apis/apigateway/2015-07-09/paginators-1.json +0 -52
- data/apis/application-autoscaling/2016-02-06/api-2.json +0 -502
- data/apis/application-autoscaling/2016-02-06/examples-1.json +0 -5
- data/apis/application-autoscaling/2016-02-06/paginators-1.json +0 -22
- data/apis/autoscaling/2011-01-01/api-2.json +0 -2038
- data/apis/autoscaling/2011-01-01/examples-1.json +0 -5
- data/apis/autoscaling/2011-01-01/paginators-1.json +0 -52
- data/apis/autoscaling/2011-01-01/resources-1.json +0 -1613
- data/apis/autoscaling/2011-01-01/waiters-2.json +0 -62
- data/apis/cloudformation/2010-05-15/api-2.json +0 -1299
- data/apis/cloudformation/2010-05-15/examples-1.json +0 -5
- data/apis/cloudformation/2010-05-15/paginators-1.json +0 -27
- data/apis/cloudformation/2010-05-15/resources-1.json +0 -202
- data/apis/cloudformation/2010-05-15/waiters-2.json +0 -235
- data/apis/cloudfront/2016-01-28/api-2.json +0 -2218
- data/apis/cloudfront/2016-01-28/examples-1.json +0 -5
- data/apis/cloudfront/2016-01-28/paginators-1.json +0 -32
- data/apis/cloudfront/2016-01-28/waiters-2.json +0 -47
- data/apis/cloudhsm/2014-05-30/api-2.json +0 -877
- data/apis/cloudhsm/2014-05-30/examples-1.json +0 -5
- data/apis/cloudsearch/2013-01-01/api-2.json +0 -2001
- data/apis/cloudsearch/2013-01-01/paginators-1.json +0 -20
- data/apis/cloudsearchdomain/2013-01-01/api-2.json +0 -373
- data/apis/cloudsearchdomain/2013-01-01/examples-1.json +0 -5
- data/apis/cloudtrail/2013-11-01/api-2.json +0 -801
- data/apis/cloudtrail/2013-11-01/examples-1.json +0 -5
- data/apis/cloudtrail/2013-11-01/paginators-1.json +0 -7
- data/apis/codecommit/2015-04-13/api-2.json +0 -916
- data/apis/codecommit/2015-04-13/examples-1.json +0 -5
- data/apis/codecommit/2015-04-13/paginators-1.json +0 -14
- data/apis/codedeploy/2014-10-06/api-2.json +0 -1954
- data/apis/codedeploy/2014-10-06/examples-1.json +0 -5
- data/apis/codedeploy/2014-10-06/paginators-1.json +0 -34
- data/apis/codepipeline/2015-07-09/api-2.json +0 -1633
- data/apis/codepipeline/2015-07-09/examples-1.json +0 -902
- data/apis/cognito-identity/2014-06-30/api-2.json +0 -859
- data/apis/cognito-identity/2014-06-30/examples-1.json +0 -5
- data/apis/cognito-idp/2016-04-18/api-2.json +0 -1657
- data/apis/cognito-idp/2016-04-18/examples-1.json +0 -5
- data/apis/cognito-sync/2014-06-30/api-2.json +0 -1874
- data/apis/config/2014-11-12/api-2.json +0 -1303
- data/apis/config/2014-11-12/examples-1.json +0 -5
- data/apis/config/2014-11-12/paginators-1.json +0 -10
- data/apis/datapipeline/2012-10-29/api-2.json +0 -1167
- data/apis/datapipeline/2012-10-29/paginators-1.json +0 -26
- data/apis/devicefarm/2015-06-23/api-2.json +0 -1819
- data/apis/devicefarm/2015-06-23/examples-1.json +0 -5
- data/apis/devicefarm/2015-06-23/paginators-1.json +0 -74
- data/apis/directconnect/2012-10-25/api-2.json +0 -793
- data/apis/directconnect/2012-10-25/examples-1.json +0 -5
- data/apis/directconnect/2012-10-25/paginators-1.json +0 -22
- data/apis/discovery/2015-11-01/api-2.json +0 -556
- data/apis/discovery/2015-11-01/examples-1.json +0 -5
- data/apis/dms/2016-01-01/api-2.json +0 -1469
- data/apis/dms/2016-01-01/examples-1.json +0 -5
- data/apis/ds/2015-04-16/api-2.json +0 -1674
- data/apis/ds/2015-04-16/examples-1.json +0 -5
- data/apis/dynamodb/2012-08-10/api-2.json +0 -1200
- data/apis/dynamodb/2012-08-10/examples-1.json +0 -5
- data/apis/dynamodb/2012-08-10/paginators-1.json +0 -26
- data/apis/dynamodb/2012-08-10/resources-1.json +0 -136
- data/apis/dynamodb/2012-08-10/waiters-2.json +0 -35
- data/apis/ec2/2015-10-01/api-2.json +0 -13759
- data/apis/ec2/2015-10-01/examples-1.json +0 -5
- data/apis/ec2/2015-10-01/paginators-1.json +0 -138
- data/apis/ec2/2015-10-01/resources-1.json +0 -2582
- data/apis/ec2/2015-10-01/waiters-2.json +0 -593
- data/apis/ec2/2016-04-01/api-2.json +0 -13842
- data/apis/ec2/2016-04-01/examples-1.json +0 -5
- data/apis/ec2/2016-04-01/paginators-1.json +0 -138
- data/apis/ec2/2016-04-01/resources-1.json +0 -2582
- data/apis/ec2/2016-04-01/waiters-2.json +0 -593
- data/apis/ecr/2015-09-21/api-2.json +0 -849
- data/apis/ecr/2015-09-21/examples-1.json +0 -5
- data/apis/ecs/2014-11-13/api-2.json +0 -1396
- data/apis/ecs/2014-11-13/examples-1.json +0 -5
- data/apis/ecs/2014-11-13/paginators-1.json +0 -40
- data/apis/ecs/2014-11-13/waiters-2.json +0 -93
- data/apis/elasticache/2015-02-02/api-2.json +0 -2426
- data/apis/elasticache/2015-02-02/examples-1.json +0 -5
- data/apis/elasticache/2015-02-02/paginators-1.json +0 -76
- data/apis/elasticache/2015-02-02/waiters-2.json +0 -143
- data/apis/elasticbeanstalk/2010-12-01/api-2.json +0 -1894
- data/apis/elasticbeanstalk/2010-12-01/examples-1.json +0 -1109
- data/apis/elasticbeanstalk/2010-12-01/paginators-1.json +0 -25
- data/apis/elasticfilesystem/2015-02-01/api-2.json +0 -713
- data/apis/elasticfilesystem/2015-02-01/examples-1.json +0 -5
- data/apis/elasticloadbalancing/2012-06-01/api-2.json +0 -2145
- data/apis/elasticloadbalancing/2012-06-01/paginators-1.json +0 -18
- data/apis/elasticloadbalancing/2012-06-01/waiters-2.json +0 -49
- data/apis/elasticmapreduce/2009-03-31/api-2.json +0 -1341
- data/apis/elasticmapreduce/2009-03-31/examples-1.json +0 -5
- data/apis/elasticmapreduce/2009-03-31/paginators-1.json +0 -32
- data/apis/elasticmapreduce/2009-03-31/waiters-2.json +0 -67
- data/apis/elastictranscoder/2012-09-25/api-2.json +0 -1807
- data/apis/elastictranscoder/2012-09-25/paginators-1.json +0 -24
- data/apis/elastictranscoder/2012-09-25/waiters-2.json +0 -30
- data/apis/email/2010-12-01/api-2.json +0 -1791
- data/apis/email/2010-12-01/examples-1.json +0 -5
- data/apis/email/2010-12-01/paginators-1.json +0 -13
- data/apis/email/2010-12-01/waiters-2.json +0 -18
- data/apis/es/2015-01-01/api-2.json +0 -764
- data/apis/events/2015-10-07/api-2.json +0 -643
- data/apis/events/2015-10-07/examples-1.json +0 -5
- data/apis/firehose/2015-08-04/api-2.json +0 -719
- data/apis/gamelift/2015-10-01/api-2.json +0 -2307
- data/apis/gamelift/2015-10-01/examples-1.json +0 -5
- data/apis/glacier/2012-06-01/api-2.json +0 -2144
- data/apis/glacier/2012-06-01/paginators-1.json +0 -28
- data/apis/glacier/2012-06-01/resources-1.json +0 -563
- data/apis/glacier/2012-06-01/waiters-2.json +0 -39
- data/apis/iam/2010-05-08/api-2.json +0 -4514
- data/apis/iam/2010-05-08/examples-1.json +0 -5
- data/apis/iam/2010-05-08/paginators-1.json +0 -198
- data/apis/iam/2010-05-08/resources-1.json +0 -1740
- data/apis/iam/2010-05-08/waiters-2.json +0 -39
- data/apis/importexport/2010-06-01/api-2.json +0 -666
- data/apis/importexport/2010-06-01/paginators-1.json +0 -11
- data/apis/inspector/2016-02-16/api-2.json +0 -1964
- data/apis/inspector/2016-02-16/examples-1.json +0 -5
- data/apis/iot-data/2015-05-28/api-2.json +0 -263
- data/apis/iot/2015-05-28/api-2.json +0 -3800
- data/apis/iot/2015-05-28/examples-1.json +0 -5
- data/apis/kinesis/2013-12-02/api-2.json +0 -822
- data/apis/kinesis/2013-12-02/examples-1.json +0 -5
- data/apis/kinesis/2013-12-02/paginators-1.json +0 -18
- data/apis/kinesis/2013-12-02/waiters-2.json +0 -18
- data/apis/kms/2014-11-01/api-2.json +0 -1209
- data/apis/kms/2014-11-01/examples-1.json +0 -5
- data/apis/kms/2014-11-01/paginators-1.json +0 -32
- data/apis/lambda/2014-11-11/api-2.json +0 -667
- data/apis/lambda/2014-11-11/paginators-1.json +0 -16
- data/apis/lambda/2015-03-31/api-2.json +0 -1342
- data/apis/lambda/2015-03-31/examples-1.json +0 -5
- data/apis/lambda/2015-03-31/paginators-1.json +0 -16
- data/apis/logs/2014-03-28/api-2.json +0 -1138
- data/apis/logs/2014-03-28/examples-1.json +0 -5
- data/apis/logs/2014-03-28/paginators-1.json +0 -49
- data/apis/machinelearning/2014-12-12/api-2.json +0 -1947
- data/apis/machinelearning/2014-12-12/paginators-1.json +0 -28
- data/apis/machinelearning/2014-12-12/waiters-2.json +0 -81
- data/apis/marketplacecommerceanalytics/2015-07-01/api-2.json +0 -120
- data/apis/marketplacecommerceanalytics/2015-07-01/examples-1.json +0 -5
- data/apis/meteringmarketplace/2016-01-14/api-2.json +0 -127
- data/apis/meteringmarketplace/2016-01-14/examples-1.json +0 -5
- data/apis/monitoring/2010-08-01/api-2.json +0 -790
- data/apis/monitoring/2010-08-01/examples-1.json +0 -5
- data/apis/monitoring/2010-08-01/paginators-1.json +0 -24
- data/apis/monitoring/2010-08-01/resources-1.json +0 -346
- data/apis/monitoring/2010-08-01/waiters-2.json +0 -18
- data/apis/opsworks/2013-02-18/api-2.json +0 -2606
- data/apis/opsworks/2013-02-18/examples-1.json +0 -5
- data/apis/opsworks/2013-02-18/paginators-1.json +0 -55
- data/apis/opsworks/2013-02-18/resources-1.json +0 -173
- data/apis/opsworks/2013-02-18/waiters-2.json +0 -295
- data/apis/rds/2014-10-31/api-2.json +0 -4757
- data/apis/rds/2014-10-31/examples-1.json +0 -5
- data/apis/rds/2014-10-31/paginators-1.json +0 -110
- data/apis/rds/2014-10-31/resources-1.json +0 -3272
- data/apis/rds/2014-10-31/waiters-2.json +0 -102
- data/apis/redshift/2012-12-01/api-2.json +0 -3768
- data/apis/redshift/2012-12-01/examples-1.json +0 -5
- data/apis/redshift/2012-12-01/paginators-1.json +0 -94
- data/apis/redshift/2012-12-01/waiters-2.json +0 -97
- data/apis/route53/2013-04-01/api-2.json +0 -3245
- data/apis/route53/2013-04-01/examples-1.json +0 -5
- data/apis/route53/2013-04-01/paginators-1.json +0 -33
- data/apis/route53/2013-04-01/waiters-2.json +0 -18
- data/apis/route53domains/2014-05-15/api-2.json +0 -1197
- data/apis/route53domains/2014-05-15/paginators-1.json +0 -17
- data/apis/s3/2006-03-01/api-2.json +0 -4517
- data/apis/s3/2006-03-01/examples-1.json +0 -5
- data/apis/s3/2006-03-01/paginators-1.json +0 -66
- data/apis/s3/2006-03-01/resources-1.json +0 -1176
- data/apis/s3/2006-03-01/waiters-2.json +0 -73
- data/apis/sdb/2009-04-15/api-2.json +0 -954
- data/apis/sdb/2009-04-15/paginators-1.json +0 -15
- data/apis/servicecatalog/2015-12-10/api-2.json +0 -749
- data/apis/servicecatalog/2015-12-10/examples-1.json +0 -5
- data/apis/sns/2010-03-31/api-2.json +0 -1139
- data/apis/sns/2010-03-31/paginators-1.json +0 -29
- data/apis/sns/2010-03-31/resources-1.json +0 -327
- data/apis/sqs/2012-11-05/api-2.json +0 -950
- data/apis/sqs/2012-11-05/examples-1.json +0 -44
- data/apis/sqs/2012-11-05/paginators-1.json +0 -7
- data/apis/ssm/2014-11-06/api-2.json +0 -1742
- data/apis/ssm/2014-11-06/examples-1.json +0 -5
- data/apis/ssm/2014-11-06/paginators-1.json +0 -34
- data/apis/storagegateway/2013-06-30/api-2.json +0 -2275
- data/apis/storagegateway/2013-06-30/examples-1.json +0 -5
- data/apis/storagegateway/2013-06-30/paginators-1.json +0 -52
- data/apis/streams.dynamodb/2012-08-10/api-2.json +0 -397
- data/apis/streams.dynamodb/2012-08-10/examples-1.json +0 -5
- data/apis/sts/2011-06-15/api-2.json +0 -521
- data/apis/sts/2011-06-15/examples-1.json +0 -5
- data/apis/support/2013-04-15/api-2.json +0 -869
- data/apis/support/2013-04-15/paginators-1.json +0 -25
- data/apis/swf/2012-01-25/api-2.json +0 -2838
- data/apis/swf/2012-01-25/paginators-1.json +0 -46
- data/apis/waf/2015-08-24/api-2.json +0 -1959
- data/apis/waf/2015-08-24/examples-1.json +0 -5
- data/apis/workspaces/2015-04-08/api-2.json +0 -632
- data/apis/workspaces/2015-04-08/examples-1.json +0 -5
- data/apis/workspaces/2015-04-08/paginators-1.json +0 -20
- data/bin/aws.rb +0 -180
- data/endpoints.json +0 -1460
- data/lib/aws-sdk-core/acm.rb +0 -6
- data/lib/aws-sdk-core/api/builder.rb +0 -106
- data/lib/aws-sdk-core/api/customizations.rb +0 -217
- data/lib/aws-sdk-core/api/docs/builder.rb +0 -220
- data/lib/aws-sdk-core/api/docs/client_type_documenter.rb +0 -109
- data/lib/aws-sdk-core/api/docs/docstring_provider.rb +0 -75
- data/lib/aws-sdk-core/api/docs/operation_documenter.rb +0 -138
- data/lib/aws-sdk-core/api/docs/param_formatter.rb +0 -163
- data/lib/aws-sdk-core/api/docs/request_syntax_example.rb +0 -22
- data/lib/aws-sdk-core/api/docs/response_structure_example.rb +0 -91
- data/lib/aws-sdk-core/api/docs/shared_example.rb +0 -100
- data/lib/aws-sdk-core/api/docs/utils.rb +0 -133
- data/lib/aws-sdk-core/api/shape_map.rb +0 -142
- data/lib/aws-sdk-core/apigateway.rb +0 -6
- data/lib/aws-sdk-core/applicationautoscaling.rb +0 -6
- data/lib/aws-sdk-core/applicationdiscoveryservice.rb +0 -5
- data/lib/aws-sdk-core/autoscaling.rb +0 -8
- data/lib/aws-sdk-core/checksums.rb +0 -51
- data/lib/aws-sdk-core/client.rb +0 -67
- data/lib/aws-sdk-core/client_waiters.rb +0 -120
- data/lib/aws-sdk-core/cloudformation.rb +0 -8
- data/lib/aws-sdk-core/cloudfront.rb +0 -15
- data/lib/aws-sdk-core/cloudfront/url_signer.rb +0 -167
- data/lib/aws-sdk-core/cloudhsm.rb +0 -5
- data/lib/aws-sdk-core/cloudsearch.rb +0 -5
- data/lib/aws-sdk-core/cloudsearchdomain.rb +0 -5
- data/lib/aws-sdk-core/cloudtrail.rb +0 -6
- data/lib/aws-sdk-core/cloudwatch.rb +0 -8
- data/lib/aws-sdk-core/cloudwatchevents.rb +0 -5
- data/lib/aws-sdk-core/cloudwatchlogs.rb +0 -6
- data/lib/aws-sdk-core/codecommit.rb +0 -6
- data/lib/aws-sdk-core/codedeploy.rb +0 -6
- data/lib/aws-sdk-core/codepipeline.rb +0 -5
- data/lib/aws-sdk-core/cognitoidentity.rb +0 -5
- data/lib/aws-sdk-core/cognitoidentityprovider.rb +0 -5
- data/lib/aws-sdk-core/cognitosync.rb +0 -4
- data/lib/aws-sdk-core/configservice.rb +0 -6
- data/lib/aws-sdk-core/databasemigrationservice.rb +0 -5
- data/lib/aws-sdk-core/datapipeline.rb +0 -5
- data/lib/aws-sdk-core/devicefarm.rb +0 -6
- data/lib/aws-sdk-core/directconnect.rb +0 -6
- data/lib/aws-sdk-core/directoryservice.rb +0 -5
- data/lib/aws-sdk-core/dynamodb.rb +0 -40
- data/lib/aws-sdk-core/dynamodb/attribute_value.rb +0 -108
- data/lib/aws-sdk-core/dynamodbstreams.rb +0 -5
- data/lib/aws-sdk-core/ec2.rb +0 -8
- data/lib/aws-sdk-core/ecr.rb +0 -5
- data/lib/aws-sdk-core/ecs.rb +0 -7
- data/lib/aws-sdk-core/efs.rb +0 -5
- data/lib/aws-sdk-core/elasticache.rb +0 -7
- data/lib/aws-sdk-core/elasticbeanstalk.rb +0 -6
- data/lib/aws-sdk-core/elasticloadbalancing.rb +0 -6
- data/lib/aws-sdk-core/elasticsearchservice.rb +0 -4
- data/lib/aws-sdk-core/elastictranscoder.rb +0 -6
- data/lib/aws-sdk-core/empty_structure.rb +0 -3
- data/lib/aws-sdk-core/emr.rb +0 -7
- data/lib/aws-sdk-core/endpoint_provider.rb +0 -95
- data/lib/aws-sdk-core/firehose.rb +0 -4
- data/lib/aws-sdk-core/gamelift.rb +0 -5
- data/lib/aws-sdk-core/glacier.rb +0 -7
- data/lib/aws-sdk-core/iam.rb +0 -8
- data/lib/aws-sdk-core/importexport.rb +0 -5
- data/lib/aws-sdk-core/inspector.rb +0 -5
- data/lib/aws-sdk-core/iot.rb +0 -5
- data/lib/aws-sdk-core/iotdataplane.rb +0 -4
- data/lib/aws-sdk-core/kinesis.rb +0 -7
- data/lib/aws-sdk-core/kms.rb +0 -6
- data/lib/aws-sdk-core/lambda.rb +0 -6
- data/lib/aws-sdk-core/lambdapreview.rb +0 -5
- data/lib/aws-sdk-core/machinelearning.rb +0 -6
- data/lib/aws-sdk-core/marketplacecommerceanalytics.rb +0 -5
- data/lib/aws-sdk-core/marketplacemetering.rb +0 -5
- data/lib/aws-sdk-core/opsworks.rb +0 -8
- data/lib/aws-sdk-core/partitions.rb +0 -174
- data/lib/aws-sdk-core/partitions/partition.rb +0 -95
- data/lib/aws-sdk-core/partitions/partition_list.rb +0 -60
- data/lib/aws-sdk-core/partitions/region.rb +0 -78
- data/lib/aws-sdk-core/partitions/service.rb +0 -84
- data/lib/aws-sdk-core/plugins/api_gateway_header.rb +0 -19
- data/lib/aws-sdk-core/plugins/csd_conditional_signing.rb +0 -30
- data/lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb +0 -52
- data/lib/aws-sdk-core/plugins/dynamodb_extended_retries.rb +0 -22
- data/lib/aws-sdk-core/plugins/dynamodb_simple_attributes.rb +0 -209
- data/lib/aws-sdk-core/plugins/ec2_copy_encrypted_snapshot.rb +0 -87
- data/lib/aws-sdk-core/plugins/ec2_region_validation.rb +0 -17
- data/lib/aws-sdk-core/plugins/glacier_account_id.rb +0 -19
- data/lib/aws-sdk-core/plugins/glacier_api_version.rb +0 -19
- data/lib/aws-sdk-core/plugins/glacier_checksums.rb +0 -87
- data/lib/aws-sdk-core/plugins/machine_learning_predict_endpoint.rb +0 -20
- data/lib/aws-sdk-core/plugins/request_signer.rb +0 -138
- data/lib/aws-sdk-core/plugins/route_53_id_fix.rb +0 -55
- data/lib/aws-sdk-core/plugins/s3_accelerate.rb +0 -73
- data/lib/aws-sdk-core/plugins/s3_bucket_dns.rb +0 -86
- data/lib/aws-sdk-core/plugins/s3_bucket_name_restrictions.rb +0 -21
- data/lib/aws-sdk-core/plugins/s3_expect_100_continue.rb +0 -27
- data/lib/aws-sdk-core/plugins/s3_get_bucket_location_fix.rb +0 -21
- data/lib/aws-sdk-core/plugins/s3_http_200_errors.rb +0 -45
- data/lib/aws-sdk-core/plugins/s3_location_constraint.rb +0 -31
- data/lib/aws-sdk-core/plugins/s3_md5s.rb +0 -50
- data/lib/aws-sdk-core/plugins/s3_redirects.rb +0 -37
- data/lib/aws-sdk-core/plugins/s3_request_signer.rb +0 -166
- data/lib/aws-sdk-core/plugins/s3_sse_cpk.rb +0 -64
- data/lib/aws-sdk-core/plugins/s3_url_encoded_keys.rb +0 -92
- data/lib/aws-sdk-core/plugins/sqs_md5s.rb +0 -162
- data/lib/aws-sdk-core/plugins/sqs_queue_urls.rb +0 -34
- data/lib/aws-sdk-core/plugins/swf_read_timeouts.rb +0 -23
- data/lib/aws-sdk-core/rds.rb +0 -8
- data/lib/aws-sdk-core/redshift.rb +0 -7
- data/lib/aws-sdk-core/route53.rb +0 -7
- data/lib/aws-sdk-core/route53domains.rb +0 -5
- data/lib/aws-sdk-core/s3.rb +0 -26
- data/lib/aws-sdk-core/s3/bucket_region_cache.rb +0 -75
- data/lib/aws-sdk-core/s3/presigner.rb +0 -113
- data/lib/aws-sdk-core/service.rb +0 -4
- data/lib/aws-sdk-core/servicecatalog.rb +0 -5
- data/lib/aws-sdk-core/ses.rb +0 -7
- data/lib/aws-sdk-core/signers/base.rb +0 -31
- data/lib/aws-sdk-core/signers/s3.rb +0 -184
- data/lib/aws-sdk-core/signers/v2.rb +0 -51
- data/lib/aws-sdk-core/signers/v3.rb +0 -34
- data/lib/aws-sdk-core/signers/v4.rb +0 -233
- data/lib/aws-sdk-core/simpledb.rb +0 -5
- data/lib/aws-sdk-core/sns.rb +0 -6
- data/lib/aws-sdk-core/sqs.rb +0 -6
- data/lib/aws-sdk-core/ssm.rb +0 -6
- data/lib/aws-sdk-core/storagegateway.rb +0 -6
- data/lib/aws-sdk-core/sts.rb +0 -5
- data/lib/aws-sdk-core/support.rb +0 -5
- data/lib/aws-sdk-core/swf.rb +0 -5
- data/lib/aws-sdk-core/tree_hash.rb +0 -69
- data/lib/aws-sdk-core/version.rb +0 -3
- data/lib/aws-sdk-core/waf.rb +0 -5
- data/lib/aws-sdk-core/waiters/null_provider.rb +0 -12
- data/lib/aws-sdk-core/waiters/provider.rb +0 -35
- data/lib/aws-sdk-core/workspaces.rb +0 -6
- data/lib/seahorse/client/plugins/restful_bindings.rb +0 -127
- data/service-models.json +0 -285
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
if RUBY_VERSION >= '2.1'
|
|
2
|
+
begin
|
|
3
|
+
require 'http/2'
|
|
4
|
+
rescue LoadError; end
|
|
5
|
+
end
|
|
6
|
+
require 'securerandom'
|
|
7
|
+
|
|
8
|
+
module Seahorse
|
|
9
|
+
module Client
|
|
10
|
+
# @api private
|
|
11
|
+
module H2
|
|
12
|
+
|
|
13
|
+
NETWORK_ERRORS = [
|
|
14
|
+
SocketError, EOFError, IOError, Timeout::Error,
|
|
15
|
+
Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EPIPE,
|
|
16
|
+
Errno::EINVAL, Errno::ETIMEDOUT, OpenSSL::SSL::SSLError,
|
|
17
|
+
Errno::EHOSTUNREACH, Errno::ECONNREFUSED,# OpenSSL::SSL::SSLErrorWaitReadable
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
# @api private
|
|
21
|
+
DNS_ERROR_MESSAGES = [
|
|
22
|
+
'getaddrinfo: nodename nor servname provided, or not known', # MacOS
|
|
23
|
+
'getaddrinfo: Name or service not known' # GNU
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
class Handler < Client::Handler
|
|
27
|
+
|
|
28
|
+
def call(context)
|
|
29
|
+
stream = nil
|
|
30
|
+
begin
|
|
31
|
+
conn = context.client.connection
|
|
32
|
+
stream = conn.new_stream
|
|
33
|
+
|
|
34
|
+
stream_mutex = Mutex.new
|
|
35
|
+
close_condition = ConditionVariable.new
|
|
36
|
+
sync_queue = Queue.new
|
|
37
|
+
|
|
38
|
+
conn.connect(context.http_request.endpoint)
|
|
39
|
+
_register_callbacks(
|
|
40
|
+
context.http_response,
|
|
41
|
+
stream,
|
|
42
|
+
stream_mutex,
|
|
43
|
+
close_condition,
|
|
44
|
+
sync_queue
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
conn.debug_output("sending initial request ...")
|
|
48
|
+
if input_emitter = context[:input_event_emitter]
|
|
49
|
+
_send_initial_headers(context.http_request, stream)
|
|
50
|
+
|
|
51
|
+
# prepare for sending events later
|
|
52
|
+
input_emitter.stream = stream
|
|
53
|
+
# request sigv4 serves as the initial #prior_signature
|
|
54
|
+
input_emitter.encoder.prior_signature =
|
|
55
|
+
context.http_request.headers['authorization'].split('Signature=').last
|
|
56
|
+
input_emitter.validate_event = context.config.validate_params
|
|
57
|
+
else
|
|
58
|
+
_send_initial_headers(context.http_request, stream)
|
|
59
|
+
_send_initial_data(context.http_request, stream)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
conn.start(stream)
|
|
63
|
+
rescue *NETWORK_ERRORS => error
|
|
64
|
+
error = NetworkingError.new(
|
|
65
|
+
error, error_message(context.http_request, error))
|
|
66
|
+
context.http_response.signal_error(error)
|
|
67
|
+
rescue => error
|
|
68
|
+
conn.debug_output(error.inspect)
|
|
69
|
+
# not retryable
|
|
70
|
+
context.http_response.signal_error(error)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
AsyncResponse.new(
|
|
74
|
+
context: context,
|
|
75
|
+
stream: stream,
|
|
76
|
+
stream_mutex: stream_mutex,
|
|
77
|
+
close_condition: close_condition,
|
|
78
|
+
sync_queue: sync_queue
|
|
79
|
+
)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
def _register_callbacks(resp, stream, stream_mutex, close_condition, sync_queue)
|
|
85
|
+
stream.on(:headers) do |headers|
|
|
86
|
+
resp.signal_headers(headers)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
stream.on(:data) do |data|
|
|
90
|
+
resp.signal_data(data)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
stream.on(:close) do
|
|
94
|
+
resp.signal_done
|
|
95
|
+
# block until #wait is ready for signal
|
|
96
|
+
# else deadlock may happen because #signal happened
|
|
97
|
+
# eariler than #wait (see AsyncResponse#wait)
|
|
98
|
+
sync_queue.pop
|
|
99
|
+
stream_mutex.synchronize {
|
|
100
|
+
close_condition.signal
|
|
101
|
+
}
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def _send_initial_headers(req, stream)
|
|
106
|
+
begin
|
|
107
|
+
headers = _h2_headers(req)
|
|
108
|
+
stream.headers(headers, end_stream: false)
|
|
109
|
+
rescue => e
|
|
110
|
+
raise Http2InitialRequestError.new(e)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def _send_initial_data(req, stream)
|
|
115
|
+
begin
|
|
116
|
+
data = req.body.read
|
|
117
|
+
stream.data(data, end_stream: true)
|
|
118
|
+
rescue => e
|
|
119
|
+
raise Http2InitialRequestError.new(e)
|
|
120
|
+
end
|
|
121
|
+
data
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# H2 pseudo headers
|
|
125
|
+
# https://http2.github.io/http2-spec/#rfc.section.8.1.2.3
|
|
126
|
+
def _h2_headers(req)
|
|
127
|
+
headers = {}
|
|
128
|
+
headers[':method'] = req.http_method.upcase
|
|
129
|
+
headers[':scheme'] = req.endpoint.scheme
|
|
130
|
+
headers[':path'] = req.endpoint.path.empty? ? '/' : req.endpoint.path
|
|
131
|
+
if req.endpoint.query && !req.endpoint.query.empty?
|
|
132
|
+
headers[':path'] += "?#{req.endpoint.query}"
|
|
133
|
+
end
|
|
134
|
+
req.headers.each {|k, v| headers[k.downcase] = v }
|
|
135
|
+
headers
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def error_message(req, error)
|
|
139
|
+
if error.is_a?(SocketError) && DNS_ERROR_MESSAGES.include?(error.message)
|
|
140
|
+
host = req.endpoint.host
|
|
141
|
+
"unable to connect to `#{host}`; SocketError: #{error.message}"
|
|
142
|
+
else
|
|
143
|
+
error.message
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -77,8 +77,8 @@ module Seahorse
|
|
|
77
77
|
if options.key?(name)
|
|
78
78
|
options[name]
|
|
79
79
|
else
|
|
80
|
-
msg = "
|
|
81
|
-
raise ArgumentError, msg %
|
|
80
|
+
msg = "missing option: `%s'"
|
|
81
|
+
raise ArgumentError, msg % name.inspect
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Seahorse
|
|
2
|
+
module Client
|
|
3
|
+
module Http
|
|
4
|
+
class AsyncResponse < Seahorse::Client::Http::Response
|
|
5
|
+
|
|
6
|
+
def initialize(options = {})
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def signal_headers(headers)
|
|
11
|
+
# H2 headers arrive as array of pair
|
|
12
|
+
hash = headers.inject({}) do |h, pair|
|
|
13
|
+
key, value = pair
|
|
14
|
+
h[key] = value
|
|
15
|
+
h
|
|
16
|
+
end
|
|
17
|
+
@status_code = hash[":status"].to_i
|
|
18
|
+
@headers = Headers.new(hash)
|
|
19
|
+
emit(:headers, @status_code, @headers)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def signal_done(options = {})
|
|
23
|
+
# H2 only has header and body
|
|
24
|
+
# ':status' header will be sent back
|
|
25
|
+
if options.keys.sort == [:body, :headers]
|
|
26
|
+
signal_headers(options[:headers])
|
|
27
|
+
signal_data(options[:body])
|
|
28
|
+
signal_done
|
|
29
|
+
elsif options.empty?
|
|
30
|
+
@body.rewind if @body.respond_to?(:rewind)
|
|
31
|
+
@done = true
|
|
32
|
+
emit(:done)
|
|
33
|
+
else
|
|
34
|
+
msg = "options must be empty or must contain :headers and :body"
|
|
35
|
+
raise ArgumentError, msg
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -40,12 +40,17 @@ module Seahorse
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# @return [String]
|
|
43
|
+
# @return [String|Array]
|
|
44
44
|
def body_contents
|
|
45
|
-
body.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
if body.is_a?(Array)
|
|
46
|
+
# an array of parsed events
|
|
47
|
+
body
|
|
48
|
+
else
|
|
49
|
+
body.rewind
|
|
50
|
+
contents = body.read
|
|
51
|
+
body.rewind
|
|
52
|
+
contents
|
|
53
|
+
end
|
|
49
54
|
end
|
|
50
55
|
|
|
51
56
|
# @param [Integer] status_code
|
|
@@ -117,15 +122,15 @@ module Seahorse
|
|
|
117
122
|
end
|
|
118
123
|
|
|
119
124
|
def on_headers(status_code_range = nil, &block)
|
|
120
|
-
@listeners[:headers] << listener(status_code_range,
|
|
125
|
+
@listeners[:headers] << listener(status_code_range, block)
|
|
121
126
|
end
|
|
122
127
|
|
|
123
128
|
def on_data(&callback)
|
|
124
|
-
@listeners[:data] <<
|
|
129
|
+
@listeners[:data] << callback
|
|
125
130
|
end
|
|
126
131
|
|
|
127
132
|
def on_done(status_code_range = nil, &callback)
|
|
128
|
-
listener = listener(status_code_range,
|
|
133
|
+
listener = listener(status_code_range, callback)
|
|
129
134
|
if @done
|
|
130
135
|
listener.call
|
|
131
136
|
else
|
|
@@ -2,6 +2,8 @@ require 'pathname'
|
|
|
2
2
|
|
|
3
3
|
module Seahorse
|
|
4
4
|
module Client
|
|
5
|
+
# @deprecated Use Aws::Logging instead.
|
|
6
|
+
# @api private
|
|
5
7
|
module Logging
|
|
6
8
|
|
|
7
9
|
# A log formatter receives a {Response} object and return
|
|
@@ -171,7 +173,11 @@ module Seahorse
|
|
|
171
173
|
end
|
|
172
174
|
|
|
173
175
|
def _http_response_body(response)
|
|
174
|
-
|
|
176
|
+
if response.context.http_response.body.respond_to?(:rewind)
|
|
177
|
+
summarize_value(response.context.http_response.body_contents)
|
|
178
|
+
else
|
|
179
|
+
''
|
|
180
|
+
end
|
|
175
181
|
end
|
|
176
182
|
|
|
177
183
|
def _error_class(response)
|
|
@@ -1,19 +1,24 @@
|
|
|
1
|
+
require 'cgi'
|
|
1
2
|
require 'net/http'
|
|
2
3
|
require 'net/https'
|
|
3
4
|
require 'delegate'
|
|
4
5
|
require 'thread'
|
|
5
6
|
require 'logger'
|
|
6
7
|
|
|
8
|
+
require_relative 'patches'
|
|
9
|
+
|
|
7
10
|
Seahorse::Client::NetHttp::Patches.apply!
|
|
8
11
|
|
|
9
12
|
module Seahorse
|
|
10
13
|
module Client
|
|
14
|
+
# @api private
|
|
11
15
|
module NetHttp
|
|
12
16
|
|
|
13
17
|
class ConnectionPool
|
|
14
18
|
|
|
15
19
|
@pools_mutex = Mutex.new
|
|
16
20
|
@pools = {}
|
|
21
|
+
@default_logger = Logger.new($stdout)
|
|
17
22
|
|
|
18
23
|
OPTIONS = {
|
|
19
24
|
http_proxy: nil,
|
|
@@ -36,10 +41,7 @@ module Seahorse
|
|
|
36
41
|
instance_variable_set("@#{opt_name}", value)
|
|
37
42
|
end
|
|
38
43
|
@pool_mutex = Mutex.new
|
|
39
|
-
@pool =
|
|
40
|
-
pool[endpoint] = []
|
|
41
|
-
pool[endpoint]
|
|
42
|
-
end
|
|
44
|
+
@pool = {}
|
|
43
45
|
end
|
|
44
46
|
|
|
45
47
|
OPTIONS.keys.each do |attr_name|
|
|
@@ -51,14 +53,14 @@ module Seahorse
|
|
|
51
53
|
|
|
52
54
|
# Makes an HTTP request, yielding a Net::HTTPResponse object.
|
|
53
55
|
#
|
|
54
|
-
# pool.request('http://domain', Net::HTTP::Get.new('/')) do |resp|
|
|
56
|
+
# pool.request(URI.parse('http://domain'), Net::HTTP::Get.new('/')) do |resp|
|
|
55
57
|
# puts resp.code # status code
|
|
56
58
|
# puts resp.to_h.inspect # dump the headers
|
|
57
59
|
# puts resp.body
|
|
58
60
|
# end
|
|
59
61
|
#
|
|
60
|
-
# @param [
|
|
61
|
-
# connect to (e.g. 'https://domain.com').
|
|
62
|
+
# @param [URI::HTTP, URI::HTTPS] endpoint The HTTP(S) endpoint
|
|
63
|
+
# to connect to (e.g. 'https://domain.com').
|
|
62
64
|
#
|
|
63
65
|
# @param [Net::HTTPRequest] request The request to make. This can be
|
|
64
66
|
# any request object from Net::HTTP (e.g. Net::HTTP::Get,
|
|
@@ -86,7 +88,9 @@ module Seahorse
|
|
|
86
88
|
# attempt to recycle an already open session
|
|
87
89
|
@pool_mutex.synchronize do
|
|
88
90
|
_clean
|
|
89
|
-
|
|
91
|
+
if @pool.key?(endpoint)
|
|
92
|
+
session = @pool[endpoint].shift
|
|
93
|
+
end
|
|
90
94
|
end
|
|
91
95
|
|
|
92
96
|
begin
|
|
@@ -100,7 +104,10 @@ module Seahorse
|
|
|
100
104
|
raise
|
|
101
105
|
else
|
|
102
106
|
# No error raised? Good, check the session into the pool.
|
|
103
|
-
@pool_mutex.synchronize
|
|
107
|
+
@pool_mutex.synchronize do
|
|
108
|
+
@pool[endpoint] = [] unless @pool.key?(endpoint)
|
|
109
|
+
@pool[endpoint] << session
|
|
110
|
+
end
|
|
104
111
|
end
|
|
105
112
|
nil
|
|
106
113
|
end
|
|
@@ -125,7 +132,7 @@ module Seahorse
|
|
|
125
132
|
nil
|
|
126
133
|
end
|
|
127
134
|
|
|
128
|
-
# Closes and removes
|
|
135
|
+
# Closes and removes all sessions from the pool.
|
|
129
136
|
# If empty! is called while there are outstanding requests they may
|
|
130
137
|
# get checked back into the pool, leaving the pool in a non-empty
|
|
131
138
|
# state.
|
|
@@ -159,16 +166,16 @@ module Seahorse
|
|
|
159
166
|
# requests through. Formatted like 'http://proxy.com:123'.
|
|
160
167
|
#
|
|
161
168
|
# @option options [Float] :http_open_timeout (15) The number of
|
|
162
|
-
# seconds to wait when opening
|
|
169
|
+
# seconds to wait when opening an HTTP session before raising a
|
|
163
170
|
# `Timeout::Error`.
|
|
164
171
|
#
|
|
165
172
|
# @option options [Integer] :http_read_timeout (60) The default
|
|
166
173
|
# number of seconds to wait for response data. This value can
|
|
167
174
|
# safely be set
|
|
168
|
-
# per-request on the session
|
|
175
|
+
# per-request on the session yielded by {#session_for}.
|
|
169
176
|
#
|
|
170
177
|
# @option options [Float] :http_idle_timeout (5) The number of
|
|
171
|
-
# seconds a connection is allowed to sit
|
|
178
|
+
# seconds a connection is allowed to sit idle before it is
|
|
172
179
|
# considered stale. Stale connections are closed and removed
|
|
173
180
|
# from the pool before making a request.
|
|
174
181
|
#
|
|
@@ -177,7 +184,7 @@ module Seahorse
|
|
|
177
184
|
# request body. This option has no effect unless the request has
|
|
178
185
|
# "Expect" header set to "100-continue". Defaults to `nil` which
|
|
179
186
|
# disables this behaviour. This value can safely be set per
|
|
180
|
-
# request on the session
|
|
187
|
+
# request on the session yielded by {#session_for}.
|
|
181
188
|
#
|
|
182
189
|
# @option options [Boolean] :http_wire_trace (false) When `true`,
|
|
183
190
|
# HTTP debug output will be sent to the `:logger`.
|
|
@@ -194,13 +201,13 @@ module Seahorse
|
|
|
194
201
|
# @option options [String] :ssl_ca_bundle Full path to the SSL
|
|
195
202
|
# certificate authority bundle file that should be used when
|
|
196
203
|
# verifying peer certificates. If you do not pass
|
|
197
|
-
# `:ssl_ca_bundle` or `:ssl_ca_directory` the
|
|
204
|
+
# `:ssl_ca_bundle` or `:ssl_ca_directory` the system default
|
|
198
205
|
# will be used if available.
|
|
199
206
|
#
|
|
200
207
|
# @option options [String] :ssl_ca_directory Full path of the
|
|
201
208
|
# directory that contains the unbundled SSL certificate
|
|
202
209
|
# authority files for verifying peer certificates. If you do
|
|
203
|
-
# not pass `:ssl_ca_bundle` or `:ssl_ca_directory` the
|
|
210
|
+
# not pass `:ssl_ca_bundle` or `:ssl_ca_directory` the
|
|
204
211
|
# system default will be used if available.
|
|
205
212
|
#
|
|
206
213
|
# @return [ConnectionPool]
|
|
@@ -211,10 +218,12 @@ module Seahorse
|
|
|
211
218
|
end
|
|
212
219
|
end
|
|
213
220
|
|
|
214
|
-
# @return [Array<ConnectionPool>] Returns a list of
|
|
221
|
+
# @return [Array<ConnectionPool>] Returns a list of the
|
|
215
222
|
# constructed connection pools.
|
|
216
223
|
def pools
|
|
217
|
-
@
|
|
224
|
+
@pools_mutex.synchronize do
|
|
225
|
+
@pools.values
|
|
226
|
+
end
|
|
218
227
|
end
|
|
219
228
|
|
|
220
229
|
private
|
|
@@ -223,7 +232,7 @@ module Seahorse
|
|
|
223
232
|
# @return [Hash]
|
|
224
233
|
def pool_options options
|
|
225
234
|
wire_trace = !!options[:http_wire_trace]
|
|
226
|
-
logger = options[:logger] ||
|
|
235
|
+
logger = options[:logger] || @default_logger if wire_trace
|
|
227
236
|
verify_peer = options.key?(:ssl_verify_peer) ?
|
|
228
237
|
!!options[:ssl_verify_peer] : true
|
|
229
238
|
{
|
|
@@ -245,6 +254,17 @@ module Seahorse
|
|
|
245
254
|
|
|
246
255
|
private
|
|
247
256
|
|
|
257
|
+
# Extract the parts of the http_proxy URI
|
|
258
|
+
# @return [Array(String)]
|
|
259
|
+
def http_proxy_parts
|
|
260
|
+
return [
|
|
261
|
+
http_proxy.host,
|
|
262
|
+
http_proxy.port,
|
|
263
|
+
(http_proxy.user && CGI::unescape(http_proxy.user)),
|
|
264
|
+
(http_proxy.password && CGI::unescape(http_proxy.password))
|
|
265
|
+
]
|
|
266
|
+
end
|
|
267
|
+
|
|
248
268
|
# Starts and returns a new HTTP(S) session.
|
|
249
269
|
# @param [String] endpoint
|
|
250
270
|
# @return [Net::HTTPSession]
|
|
@@ -255,14 +275,12 @@ module Seahorse
|
|
|
255
275
|
args = []
|
|
256
276
|
args << endpoint.host
|
|
257
277
|
args << endpoint.port
|
|
258
|
-
args
|
|
259
|
-
args << http_proxy.port
|
|
260
|
-
args << http_proxy.user
|
|
261
|
-
args << http_proxy.password
|
|
278
|
+
args += http_proxy_parts
|
|
262
279
|
|
|
263
280
|
http = ExtendedSession.new(Net::HTTP.new(*args.compact))
|
|
264
281
|
http.set_debug_output(logger) if http_wire_trace?
|
|
265
282
|
http.open_timeout = http_open_timeout
|
|
283
|
+
http.keep_alive_timeout = http_idle_timeout if http.respond_to?(:keep_alive_timeout=)
|
|
266
284
|
|
|
267
285
|
if endpoint.scheme == 'https'
|
|
268
286
|
http.use_ssl = true
|
|
@@ -285,12 +303,12 @@ module Seahorse
|
|
|
285
303
|
# Removes stale sessions from the pool. This method *must* be called
|
|
286
304
|
# @note **Must** be called behind a `@pool_mutex` synchronize block.
|
|
287
305
|
def _clean
|
|
288
|
-
now =
|
|
306
|
+
now = Aws::Util.monotonic_milliseconds
|
|
289
307
|
@pool.each_pair do |endpoint,sessions|
|
|
290
308
|
sessions.delete_if do |session|
|
|
291
309
|
if
|
|
292
310
|
session.last_used.nil? or
|
|
293
|
-
now - session.last_used > http_idle_timeout
|
|
311
|
+
now - session.last_used > http_idle_timeout * 1000
|
|
294
312
|
then
|
|
295
313
|
session.finish
|
|
296
314
|
true
|
|
@@ -299,7 +317,7 @@ module Seahorse
|
|
|
299
317
|
end
|
|
300
318
|
end
|
|
301
319
|
|
|
302
|
-
# Helper methods extended onto Net::HTTPSession objects
|
|
320
|
+
# Helper methods extended onto Net::HTTPSession objects opened by the
|
|
303
321
|
# connection pool.
|
|
304
322
|
# @api private
|
|
305
323
|
class ExtendedSession < Delegator
|
|
@@ -309,7 +327,7 @@ module Seahorse
|
|
|
309
327
|
@http = http
|
|
310
328
|
end
|
|
311
329
|
|
|
312
|
-
# @return [
|
|
330
|
+
# @return [Integer,nil]
|
|
313
331
|
attr_reader :last_used
|
|
314
332
|
|
|
315
333
|
def __getobj__
|
|
@@ -322,8 +340,8 @@ module Seahorse
|
|
|
322
340
|
|
|
323
341
|
# Sends the request and tracks that this session has been used.
|
|
324
342
|
def request(*args, &block)
|
|
325
|
-
@last_used = Time.now
|
|
326
343
|
@http.request(*args, &block)
|
|
344
|
+
@last_used = Aws::Util.monotonic_milliseconds
|
|
327
345
|
end
|
|
328
346
|
|
|
329
347
|
# Attempts to close/finish the session without raising an error.
|