mongo 2.20.0 → 2.20.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -1
  3. data/Rakefile +57 -21
  4. data/lib/mongo/config.rb +2 -2
  5. data/lib/mongo/retryable/base_worker.rb +28 -3
  6. data/lib/mongo/retryable/read_worker.rb +9 -8
  7. data/lib/mongo/retryable/write_worker.rb +4 -4
  8. data/lib/mongo/server/pending_connection.rb +19 -6
  9. data/lib/mongo/socket/ssl.rb +22 -1
  10. data/lib/mongo/version.rb +1 -5
  11. data/mongo.gemspec +8 -11
  12. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +3 -0
  13. data/spec/integration/retryable_reads_errors_spec.rb +35 -23
  14. data/spec/integration/sdam_error_handling_spec.rb +2 -0
  15. data/spec/lite_spec_helper.rb +0 -10
  16. data/spec/mongo/collection_crud_spec.rb +1 -0
  17. data/spec/mongo/server/connection_spec.rb +22 -0
  18. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
  19. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
  20. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
  21. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
  22. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
  23. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
  24. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
  25. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
  26. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
  27. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
  28. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
  29. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
  30. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
  31. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +1 -0
  32. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +1 -0
  33. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +1 -0
  34. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +1 -0
  35. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +1 -0
  36. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +1 -0
  37. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1 -0
  38. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +1 -0
  39. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +1 -0
  40. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1 -0
  41. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1 -0
  42. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1 -0
  43. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +1 -0
  44. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +1 -0
  45. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +1 -0
  46. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +1 -0
  47. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +1 -0
  48. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +1 -0
  49. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +1 -0
  50. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +1 -0
  51. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +1 -0
  52. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +1 -0
  53. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +1 -0
  54. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +1 -0
  55. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +1 -0
  56. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +1 -0
  57. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +1 -0
  58. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +1 -0
  59. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +1 -0
  60. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +1 -0
  61. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +1 -0
  62. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +1 -0
  63. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +1 -0
  64. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +1 -0
  65. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +1 -0
  66. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +1 -0
  67. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +1 -0
  68. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +1 -0
  69. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +1 -0
  70. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +1 -0
  71. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +1 -0
  72. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +1 -0
  73. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +1 -0
  74. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
  75. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
  76. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +2 -0
  77. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +2 -0
  78. data/spec/spec_tests/transactions_unified_spec.rb +2 -1
  79. data/spec/support/certificates/atlas-ocsp-ca.crt +89 -77
  80. data/spec/support/certificates/atlas-ocsp.crt +117 -122
  81. data/spec/support/certificates/retrieve-atlas-cert +1 -1
  82. metadata +12 -84
  83. checksums.yaml.gz.sig +0 -0
  84. data/spec/shared/LICENSE +0 -20
  85. data/spec/shared/bin/get-mongodb-download-url +0 -17
  86. data/spec/shared/bin/s3-copy +0 -45
  87. data/spec/shared/bin/s3-upload +0 -69
  88. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  89. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  90. data/spec/shared/lib/mrss/constraints.rb +0 -378
  91. data/spec/shared/lib/mrss/docker_runner.rb +0 -298
  92. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  93. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  94. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  95. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  96. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  97. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  98. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  99. data/spec/shared/lib/mrss/utils.rb +0 -37
  100. data/spec/shared/share/Dockerfile.erb +0 -281
  101. data/spec/shared/share/haproxy-1.conf +0 -16
  102. data/spec/shared/share/haproxy-2.conf +0 -17
  103. data/spec/shared/shlib/config.sh +0 -27
  104. data/spec/shared/shlib/distro.sh +0 -74
  105. data/spec/shared/shlib/server.sh +0 -417
  106. data/spec/shared/shlib/set_env.sh +0 -146
  107. data/spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock +0 -19
  108. data.tar.gz.sig +0 -0
  109. metadata.gz.sig +0 -3
metadata CHANGED
@@ -1,41 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.20.0
4
+ version: 2.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The MongoDB Ruby Team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIEeDCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQsFADBBMREwDwYDVQQDDAhkYngt
14
- cnVieTEXMBUGCgmSJomT8ixkARkWB21vbmdvZGIxEzARBgoJkiaJk/IsZAEZFgNj
15
- b20wHhcNMjQwMjA5MTc0NzIyWhcNMjUwMjA4MTc0NzIyWjBBMREwDwYDVQQDDAhk
16
- YngtcnVieTEXMBUGCgmSJomT8ixkARkWB21vbmdvZGIxEzARBgoJkiaJk/IsZAEZ
17
- FgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC0/Veq9l47cTfX
18
- tQ+kHq2NOCwJuJGt1iXWQ/vH/yp7pZ/bLej7gPDl2CfIngAXRjM7r1FkR9ya7VAm
19
- IneBFcVU3HhpIXWi4ByXGjBOXFD1Dfbz4C4zedIWRk/hNzXa+rQY4KPwpOwG/hZg
20
- id+rSXWSbNlkyN97XfonweVh7JsIa9X/2JY9ADYjhCfEZF+b0+Wl7+jgwzLWb46I
21
- 0WH0bZBIZ0BbKAwUXIgvq5mQf9PzukmMVYCwnkJ/P4wrHO22HuwnbMyvJuGjVwqi
22
- j1NRp/2vjmKBFWxIfhlSXEIiqAmeEVNXzhPvTVeyo+rma+7R3Bo+4WHkcnPpXJJZ
23
- Jd63qXMvTB0GplEcMJPztWhrJOmcxIOVoQyigEPSQT8JpzFVXby4SGioizv2eT7l
24
- VYSiCHuc3yEDyq5M+98WGX2etbj6esYtzI3rDevpIAHPB6HQmtoJIA4dSl3gjFb+
25
- D+YQSuB2qYu021FI9zeY9sbZyWysEXBxhwrmTk+XUV0qz+OQZkMCAwEAAaN7MHkw
26
- CQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFH4nnr4tYlatU57RbExW
27
- jG86YM5nMB8GA1UdEQQYMBaBFGRieC1ydWJ5QG1vbmdvZGIuY29tMB8GA1UdEgQY
28
- MBaBFGRieC1ydWJ5QG1vbmdvZGIuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQBKGtHA
29
- fpi3N/BL1J5O4CBsAjtF4jHDiw2r5MwK+66NzMh3uedjgPI7MoosemLy++SB+8BR
30
- SE8bDkb6gfDQQzrI6KSXXyqH2TbQXpY5Tac7/yqXRiu8G2qOrOj4czB/Hq7j09CV
31
- YoH88v6hL11i5jt6jPjFh8hXYG0hDQxhi3atRz5Wwd98tUf2DSbyJXJiRgCBeZjl
32
- rP7AnKsWMu0C+zPlL+nXtQr+nTFtkKXRWfUJMqePpBqtriQvgQ+Y1ItqYVTSLuiM
33
- iwUMcn/rGhdCMBSaKDXdFkIveCHQE2f2WBo2EdErrcTrgEKYYdNfzcb/43j7L1kx
34
- AUwyTtk+HFrviBynQbKN82rjbZE+5gukVea5c7idQPkqacPYsoU37DI+hTlUyJkV
35
- dcTtfEg44lLlfNukBslfiQf54r+uWbyB0m0rDUN/py7/Ghyzt5GLBU91uCO3dGoI
36
- 55uFRHMvEcJMTDeImC/nuucPCAiEGMHggr9+NPC0tqpxjGKTo7lS7GzUFjg=
37
- -----END CERTIFICATE-----
38
- date: 2024-03-28 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2024-07-10 00:00:00.000000000 Z
39
12
  dependencies:
40
13
  - !ruby/object:Gem::Dependency
41
14
  name: bson
@@ -57,7 +30,10 @@ dependencies:
57
30
  - - "<"
58
31
  - !ruby/object:Gem::Version
59
32
  version: 6.0.0
60
- description: A Ruby driver for MongoDB
33
+ description: |
34
+ A pure-Ruby driver for connecting to, querying, and manipulating MongoDB
35
+ databases. Officially developed and supported by MongoDB, with love for
36
+ the Ruby community.
61
37
  email: dbx-ruby@mongodb.com
62
38
  executables:
63
39
  - mongo_console
@@ -931,29 +907,6 @@ files:
931
907
  - spec/runners/unified/test.rb
932
908
  - spec/runners/unified/test_group.rb
933
909
  - spec/runners/unified/thread_operations.rb
934
- - spec/shared/LICENSE
935
- - spec/shared/bin/get-mongodb-download-url
936
- - spec/shared/bin/s3-copy
937
- - spec/shared/bin/s3-upload
938
- - spec/shared/lib/mrss/child_process_helper.rb
939
- - spec/shared/lib/mrss/cluster_config.rb
940
- - spec/shared/lib/mrss/constraints.rb
941
- - spec/shared/lib/mrss/docker_runner.rb
942
- - spec/shared/lib/mrss/eg_config_utils.rb
943
- - spec/shared/lib/mrss/event_subscriber.rb
944
- - spec/shared/lib/mrss/lite_constraints.rb
945
- - spec/shared/lib/mrss/server_version_registry.rb
946
- - spec/shared/lib/mrss/session_registry.rb
947
- - spec/shared/lib/mrss/session_registry_legacy.rb
948
- - spec/shared/lib/mrss/spec_organizer.rb
949
- - spec/shared/lib/mrss/utils.rb
950
- - spec/shared/share/Dockerfile.erb
951
- - spec/shared/share/haproxy-1.conf
952
- - spec/shared/share/haproxy-2.conf
953
- - spec/shared/shlib/config.sh
954
- - spec/shared/shlib/distro.sh
955
- - spec/shared/shlib/server.sh
956
- - spec/shared/shlib/set_env.sh
957
910
  - spec/solo/clean_exit_spec.rb
958
911
  - spec/spec_helper.rb
959
912
  - spec/spec_tests/auth_spec.rb
@@ -1942,7 +1895,6 @@ files:
1942
1895
  - spec/support/crypt/schema_maps/schema_map_local.json
1943
1896
  - spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json
1944
1897
  - spec/support/dns.rb
1945
- - spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock
1946
1898
  - spec/support/json_ext_formatter.rb
1947
1899
  - spec/support/keyword_struct.rb
1948
1900
  - spec/support/local_resource_registry.rb
@@ -1970,10 +1922,10 @@ licenses:
1970
1922
  metadata:
1971
1923
  bug_tracker_uri: https://jira.mongodb.org/projects/RUBY
1972
1924
  changelog_uri: https://github.com/mongodb/mongo-ruby-driver/releases
1973
- documentation_uri: https://mongodb.com/docs/ruby-driver/
1974
1925
  homepage_uri: https://mongodb.com/docs/ruby-driver/
1926
+ documentation_uri: https://mongodb.com/docs/ruby-driver/current/tutorials/quick-start/
1975
1927
  source_code_uri: https://github.com/mongodb/mongo-ruby-driver
1976
- post_install_message:
1928
+ post_install_message:
1977
1929
  rdoc_options: []
1978
1930
  require_paths:
1979
1931
  - lib
@@ -1988,8 +1940,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1988
1940
  - !ruby/object:Gem::Version
1989
1941
  version: '0'
1990
1942
  requirements: []
1991
- rubygems_version: 3.3.15
1992
- signing_key:
1943
+ rubygems_version: 3.4.19
1944
+ signing_key:
1993
1945
  specification_version: 4
1994
1946
  summary: Ruby driver for MongoDB
1995
1947
  test_files:
@@ -2389,29 +2341,6 @@ test_files:
2389
2341
  - spec/runners/unified/test_group.rb
2390
2342
  - spec/runners/unified/thread_operations.rb
2391
2343
  - spec/runners/unified.rb
2392
- - spec/shared/LICENSE
2393
- - spec/shared/bin/get-mongodb-download-url
2394
- - spec/shared/bin/s3-copy
2395
- - spec/shared/bin/s3-upload
2396
- - spec/shared/lib/mrss/child_process_helper.rb
2397
- - spec/shared/lib/mrss/cluster_config.rb
2398
- - spec/shared/lib/mrss/constraints.rb
2399
- - spec/shared/lib/mrss/docker_runner.rb
2400
- - spec/shared/lib/mrss/eg_config_utils.rb
2401
- - spec/shared/lib/mrss/event_subscriber.rb
2402
- - spec/shared/lib/mrss/lite_constraints.rb
2403
- - spec/shared/lib/mrss/server_version_registry.rb
2404
- - spec/shared/lib/mrss/session_registry.rb
2405
- - spec/shared/lib/mrss/session_registry_legacy.rb
2406
- - spec/shared/lib/mrss/spec_organizer.rb
2407
- - spec/shared/lib/mrss/utils.rb
2408
- - spec/shared/share/Dockerfile.erb
2409
- - spec/shared/share/haproxy-1.conf
2410
- - spec/shared/share/haproxy-2.conf
2411
- - spec/shared/shlib/config.sh
2412
- - spec/shared/shlib/distro.sh
2413
- - spec/shared/shlib/server.sh
2414
- - spec/shared/shlib/set_env.sh
2415
2344
  - spec/solo/clean_exit_spec.rb
2416
2345
  - spec/spec_helper.rb
2417
2346
  - spec/spec_tests/auth_spec.rb
@@ -3400,7 +3329,6 @@ test_files:
3400
3329
  - spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json
3401
3330
  - spec/support/crypt.rb
3402
3331
  - spec/support/dns.rb
3403
- - spec/support/faas/app/aws_lambda/mongodb/Gemfile.lock
3404
3332
  - spec/support/json_ext_formatter.rb
3405
3333
  - spec/support/keyword_struct.rb
3406
3334
  - spec/support/local_resource_registry.rb
checksums.yaml.gz.sig DELETED
Binary file
data/spec/shared/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2020 MongoDB, Inc.
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- desired_version, arch = ARGV
4
- if arch.nil?
5
- STDERR.puts "Usage: get-mongodb-download-url desired-version arch"
6
- exit 1
7
- end
8
-
9
- $: << File.join(File.dirname(__FILE__), '../lib')
10
- require 'mrss/server_version_registry'
11
-
12
- begin
13
- puts Mrss::ServerVersionRegistry.new(desired_version, arch).download_url
14
- rescue Mrss::ServerVersionRegistry::Error => exc
15
- STDERR.puts "Error: #{exc}"
16
- exit 2
17
- end
@@ -1,45 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
- require 'aws-sdk-s3'
5
-
6
- options = {}
7
- OptionParser.new do |opts|
8
- opts.banner = "Usage: s3-copy options"
9
-
10
- opts.on("-r", "--region=REGION", "AWS region to use (default us-east-1)") do |v|
11
- options[:region] = v
12
- end
13
-
14
- opts.on("-p", "--param=KEY=VALUE", "Specify parameter for new files") do |v|
15
- options[:params] ||= {}
16
- k, v = v.split('=', 2)
17
- options[:params][k.to_sym] = v
18
- end
19
-
20
- opts.on("-f", "--from=BUCKET:PATH", "Bucket name and key (or path) to copy from") do |v|
21
- options[:from] = v
22
- end
23
-
24
- opts.on("-t", "--to=BUCKET:PATH", "Bucket name and key (or path) to write to (may be specified more than once)") do |v|
25
- options[:to] ||= []
26
- options[:to] << v
27
- end
28
- end.parse!
29
-
30
- ENV['AWS_REGION'] ||= options[:region] || 'us-east-1'
31
-
32
- bucket, key = options.fetch(:from).split(':', 2)
33
-
34
- s3 = Aws::S3::Client.new
35
-
36
- options.fetch(:to).each do |dest|
37
- STDERR.puts "Copying to #{dest}"
38
- dbucket, dkey = dest.split(':', 2)
39
- s3.copy_object(
40
- bucket: dbucket,
41
- key: dkey,
42
- copy_source: "/#{bucket}/#{key}",
43
- **options[:params] || {},
44
- )
45
- end
@@ -1,69 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
- require 'aws-sdk-s3'
5
-
6
- options = {}
7
- OptionParser.new do |opts|
8
- opts.banner = "Usage: s3-upload options"
9
-
10
- opts.on("-r", "--region=REGION", "AWS region to use (default us-east-1)") do |v|
11
- options[:region] = v
12
- end
13
-
14
- opts.on("-p", "--param=KEY=VALUE", "Specify parameter for S3 upload") do |v|
15
- options[:params] ||= {}
16
- k, v = v.split('=', 2)
17
- options[:params][k.to_sym] = v
18
- end
19
-
20
- opts.on("-f", "--file=PATH", "Path to the file to upload, - to upload standard input") do |v|
21
- options[:file] = v
22
- end
23
-
24
- opts.on("-w", "--write=BUCKET:PATH", "Bucket name and key (or path) to upload to") do |v|
25
- options[:write] = v
26
- end
27
-
28
- opts.on("-c", "--copy=BUCKET:PATH", "Bucket name and key (or path) to copy to (may be specified more than once)") do |v|
29
- options[:copy] ||= []
30
- options[:copy] << v
31
- end
32
- end.parse!
33
-
34
- ENV['AWS_REGION'] ||= options[:region] || 'us-east-1'
35
-
36
- def upload(f, options)
37
- s3 = Aws::S3::Client.new
38
- write = options.fetch(:write)
39
- STDERR.puts "Writing #{write}"
40
- bucket, key = write.split(':', 2)
41
- s3.put_object(
42
- body: f.read,
43
- bucket: bucket,
44
- key: key,
45
- **options[:params] || {},
46
- )
47
- if copy = options[:copy]
48
- copy.each do |dest|
49
- STDERR.puts "Copying to #{dest}"
50
- dbucket, dkey = dest.split(':', 2)
51
- s3.copy_object(
52
- bucket: dbucket,
53
- key: dkey,
54
- copy_source: "/#{bucket}/#{key}",
55
- **options[:params] || {},
56
- )
57
- end
58
- end
59
- end
60
-
61
- if options[:file] == '-'
62
- upload(STDIN, options)
63
- elsif options[:file]
64
- File.open(options[:file]) do |f|
65
- upload(f, options)
66
- end
67
- else
68
- upload(STDIN, options)
69
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- autoload :ChildProcess, 'childprocess'
5
- autoload :Tempfile, 'tempfile'
6
-
7
- module Mrss
8
- module ChildProcessHelper
9
- class SpawnError < StandardError; end
10
-
11
- module_function def call(cmd, env: nil, cwd: nil)
12
- process = ChildProcess.new(*cmd)
13
- process.io.inherit!
14
- if cwd
15
- process.cwd = cwd
16
- end
17
- if env
18
- env.each do |k, v|
19
- process.environment[k.to_s] = v
20
- end
21
- end
22
- process.start
23
- process.wait
24
- process
25
- end
26
-
27
- module_function def check_call(cmd, env: nil, cwd: nil)
28
- process = call(cmd, env: env, cwd: cwd)
29
- unless process.exit_code == 0
30
- raise SpawnError, "Failed to execute: #{cmd}"
31
- end
32
- end
33
-
34
- module_function def get_output(cmd, env: nil, cwd: nil)
35
- process = ChildProcess.new(*cmd)
36
- process.io.inherit!
37
- if cwd
38
- process.cwd = cwd
39
- end
40
- if env
41
- env.each do |k, v|
42
- process.environment[k.to_s] = v
43
- end
44
- end
45
-
46
- output = ''
47
- r, w = IO.pipe
48
-
49
- begin
50
- process.io.stdout = w
51
- process.start
52
- w.close
53
-
54
- thread = Thread.new do
55
- begin
56
- loop do
57
- output << r.readpartial(16384)
58
- end
59
- rescue EOFError
60
- end
61
- end
62
-
63
- process.wait
64
- thread.join
65
- ensure
66
- r.close
67
- end
68
-
69
- [process, output]
70
- end
71
-
72
- module_function def check_output(*args)
73
- process, output = get_output(*args)
74
- unless process.exit_code == 0
75
- raise SpawnError,"Failed to execute: #{args}"
76
- end
77
- output
78
- end
79
- end
80
- end
@@ -1,231 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- # ClusterConfig requires ClientRegistry class provided by the host project.
5
-
6
- require 'singleton'
7
-
8
- module Mrss
9
- class ClusterConfig
10
- include Singleton
11
- include RSpec::Core::Pending
12
-
13
- def single_server?
14
- determine_cluster_config
15
- @single_server
16
- end
17
-
18
- def sharded_ish?
19
- determine_cluster_config
20
- @topology == :sharded || @topology == :load_balanced
21
- end
22
-
23
- def replica_set_name
24
- determine_cluster_config
25
- @replica_set_name
26
- end
27
-
28
- def server_version
29
- determine_cluster_config
30
- @server_version
31
- end
32
-
33
- def enterprise?
34
- determine_cluster_config
35
- @enterprise
36
- end
37
-
38
- def short_server_version
39
- server_version.split('.')[0..1].join('.')
40
- end
41
-
42
- def fcv
43
- determine_cluster_config
44
- @fcv
45
- end
46
-
47
- # Per https://jira.mongodb.org/browse/SERVER-39052, working with FCV
48
- # in sharded topologies is annoying. Also, FCV doesn't exist in servers
49
- # less than 3.4. This method returns FCV on 3.4+ servers when in single
50
- # or RS topologies, and otherwise returns the major.minor server version.
51
- def fcv_ish
52
- if server_version.nil?
53
- raise "Deployment server version not known - check that connection to deployment succeeded"
54
- end
55
-
56
- if server_version >= '3.4' && !sharded_ish?
57
- fcv
58
- else
59
- if short_server_version == '4.1'
60
- '4.2'
61
- else
62
- short_server_version
63
- end
64
- end
65
- end
66
-
67
- # @return [ Mongo::Address ] The address of the primary in the deployment.
68
- def primary_address
69
- determine_cluster_config
70
- @primary_address
71
- end
72
-
73
- def primary_address_str
74
- determine_cluster_config
75
- @primary_address.seed
76
- end
77
-
78
- def primary_address_host
79
- both = primary_address_str
80
- both.split(':').first
81
- end
82
-
83
- def primary_address_port
84
- both = primary_address_str
85
- both.split(':')[1] || 27017
86
- end
87
-
88
- def primary_description
89
- determine_cluster_config
90
- @primary_description
91
- end
92
-
93
- def server_parameters
94
- determine_cluster_config
95
- @server_parameters
96
- end
97
-
98
- # Try running a command on the admin database to see if the mongod was
99
- # started with auth.
100
- def auth_enabled?
101
- if @auth_enabled.nil?
102
- @auth_enabled = begin
103
- basic_client.use(:admin).command(getCmdLineOpts: 1).first["argv"].include?("--auth")
104
- rescue => e
105
- e.message =~ /(not authorized)|(unauthorized)|(no users authenticated)|(requires authentication)/
106
- end
107
- end
108
- @auth_enabled
109
- end
110
-
111
- def topology
112
- determine_cluster_config
113
- @topology
114
- end
115
-
116
- def storage_engine
117
- @storage_engine ||= begin
118
- # 2.6 does not have wired tiger
119
- if short_server_version == '2.6'
120
- :mmapv1
121
- else
122
- client = ClientRegistry.instance.global_client('root_authorized')
123
- if sharded_ish?
124
- shards = client.use(:admin).command(listShards: 1).first
125
- if shards['shards'].empty?
126
- raise 'Shards are empty'
127
- end
128
- shard = shards['shards'].first
129
- address_str = shard['host'].sub(/^.*\//, '').sub(/,.*/, '')
130
- client = ClusterTools.instance.direct_client(address_str,
131
- SpecConfig.instance.test_options.merge(SpecConfig.instance.auth_options).merge(connect: :direct))
132
- end
133
- rv = client.use(:admin).command(serverStatus: 1).first
134
- rv = rv['storageEngine']['name']
135
- rv_map = {
136
- 'wiredTiger' => :wired_tiger,
137
- 'mmapv1' => :mmapv1,
138
- }
139
- rv_map[rv] || rv
140
- end
141
- end
142
- end
143
-
144
- # This method returns an alternate address for connecting to the configured
145
- # deployment. For example, if the replica set is configured with nodes at
146
- # of localhost:27017 and so on, this method will return 127.0.0.:27017.
147
- #
148
- # Note that the "alternate" refers to replica set configuration, not the
149
- # addresses specified in test suite configuration. If the deployment topology
150
- # is not a replica set, "alternate" refers to test suite configuration as
151
- # this is the only configuration available.
152
- def alternate_address
153
- @alternate_address ||= begin
154
- address = primary_address_host
155
- str = case address
156
- when '127.0.0.1'
157
- 'localhost'
158
- when /^(\d+\.){3}\d+$/
159
- skip 'This test requires a hostname or 127.0.0.1 as address'
160
- else
161
- # We don't know if mongod is listening on ipv4 or ipv6, in principle.
162
- # Our tests use ipv4, so hardcode that for now.
163
- # To support both we need to try both addresses which will make this
164
- # test more complicated.
165
- #
166
- # JRuby chokes on primary_address_port as the port (e.g. 27017).
167
- # Since the port does not actually matter, use a common port like 80.
168
- resolved_address = Addrinfo.getaddrinfo(address, 80, Socket::PF_INET).first.ip_address
169
- if resolved_address.include?(':')
170
- "[#{resolved_address}]"
171
- else
172
- resolved_address
173
- end
174
- end + ":#{primary_address_port}"
175
- Mongo::Address.new(str)
176
- end
177
- end
178
-
179
- private
180
-
181
- def determine_cluster_config
182
- return if @primary_address
183
-
184
- # Run all commands to figure out the cluster configuration from the same
185
- # client. This is somewhat wasteful when running a single test, but reduces
186
- # test runtime for the suite overall because all commands are sent on the
187
- # same connection rather than each command connecting to the cluster by
188
- # itself.
189
- client = ClientRegistry.instance.global_client('root_authorized')
190
-
191
- primary = client.cluster.next_primary
192
- @primary_address = primary.address
193
- @primary_description = primary.description
194
- @replica_set_name = client.cluster.topology.replica_set_name
195
-
196
- @topology ||= begin
197
- topology = client.cluster.topology.class.name.sub(/.*::/, '')
198
- topology = topology.gsub(/([A-Z])/) { |match| '_' + match.downcase }.sub(/^_/, '')
199
- if topology =~ /^replica_set/
200
- topology = 'replica_set'
201
- end
202
- topology.to_sym
203
- end
204
-
205
- @single_server = client.cluster.servers_list.length == 1
206
-
207
- build_info = client.database.command(buildInfo: 1).first
208
-
209
- @server_version = build_info['version']
210
- @enterprise = build_info['modules'] && build_info['modules'].include?('enterprise')
211
-
212
- @server_parameters = begin
213
- client.use(:admin).command(getParameter: '*').first
214
- rescue => e
215
- STDERR.puts("WARNING: Failed to obtain server parameters: #{e.class}: #{e.message}")
216
- {}
217
- end
218
-
219
- if !sharded_ish? && short_server_version >= '3.4'
220
- rv = @server_parameters['featureCompatibilityVersion']
221
- @fcv = rv['version'] || rv
222
- end
223
- end
224
-
225
- def basic_client
226
- # Do not cache the result here so that if the client gets closed,
227
- # client registry reconnects it in subsequent tests
228
- ClientRegistry.instance.global_client('basic')
229
- end
230
- end
231
- end