mongo 2.19.3 → 2.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Rakefile +27 -154
  4. data/lib/mongo/cluster/topology/base.rb +16 -0
  5. data/lib/mongo/cluster.rb +27 -1
  6. data/lib/mongo/collection/view/iterable.rb +1 -0
  7. data/lib/mongo/collection.rb +4 -2
  8. data/lib/mongo/error/transactions_not_supported.rb +34 -0
  9. data/lib/mongo/error.rb +1 -0
  10. data/lib/mongo/grid/fs_bucket.rb +6 -0
  11. data/lib/mongo/monitoring/event/secure.rb +1 -1
  12. data/lib/mongo/operation/shared/executable.rb +43 -27
  13. data/lib/mongo/operation/shared/response_handling.rb +23 -25
  14. data/lib/mongo/retryable/read_worker.rb +7 -6
  15. data/lib/mongo/retryable/write_worker.rb +7 -4
  16. data/lib/mongo/retryable.rb +2 -2
  17. data/lib/mongo/server/app_metadata/environment.rb +64 -9
  18. data/lib/mongo/server/app_metadata.rb +5 -4
  19. data/lib/mongo/server/description/features.rb +1 -0
  20. data/lib/mongo/server_selector/base.rb +32 -6
  21. data/lib/mongo/session/server_session/dirtyable.rb +52 -0
  22. data/lib/mongo/session/server_session.rb +3 -0
  23. data/lib/mongo/session/session_pool.rb +12 -18
  24. data/lib/mongo/session.rb +32 -0
  25. data/lib/mongo/uri.rb +0 -4
  26. data/lib/mongo/version.rb +1 -1
  27. data/mongo.gemspec +1 -7
  28. data/spec/atlas/atlas_connectivity_spec.rb +4 -4
  29. data/spec/faas/ruby-sam-app/Gemfile +9 -0
  30. data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
  31. data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
  32. data/spec/faas/ruby-sam-app/template.yaml +48 -0
  33. data/spec/integration/client_side_encryption/corpus_spec.rb +10 -2
  34. data/spec/integration/retryable_reads_errors_spec.rb +161 -8
  35. data/spec/integration/retryable_writes_errors_spec.rb +156 -0
  36. data/spec/mongo/cluster_spec.rb +36 -0
  37. data/spec/mongo/collection/view/aggregation_spec.rb +6 -1
  38. data/spec/mongo/collection/view/explainable_spec.rb +2 -0
  39. data/spec/mongo/collection_crud_spec.rb +1 -1
  40. data/spec/mongo/operation/insert_spec.rb +1 -1
  41. data/spec/mongo/retryable/write_worker_spec.rb +39 -0
  42. data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
  43. data/spec/mongo/server/app_metadata_spec.rb +12 -2
  44. data/spec/mongo/server/connection_spec.rb +4 -0
  45. data/spec/mongo/session/session_pool_spec.rb +1 -16
  46. data/spec/mongo/session_transaction_spec.rb +15 -0
  47. data/spec/mongo/uri_spec.rb +0 -9
  48. data/spec/runners/crud/test.rb +0 -8
  49. data/spec/runners/crud.rb +1 -1
  50. data/spec/runners/transactions/test.rb +12 -3
  51. data/spec/runners/unified/assertions.rb +16 -3
  52. data/spec/runners/unified/crud_operations.rb +12 -0
  53. data/spec/runners/unified/support_operations.rb +3 -5
  54. data/spec/runners/unified/test.rb +8 -1
  55. data/spec/shared/lib/mrss/docker_runner.rb +3 -0
  56. data/spec/shared/share/Dockerfile.erb +20 -69
  57. data/spec/shared/shlib/server.sh +1 -0
  58. data/spec/shared/shlib/set_env.sh +5 -28
  59. data/spec/spec_tests/data/client_side_encryption/explain.yml +2 -2
  60. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
  61. data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
  62. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +348 -0
  63. data/spec/spec_tests/data/index_management/createSearchIndex.yml +5 -3
  64. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +7 -4
  65. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +2 -1
  66. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +13 -7
  67. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +2 -1
  68. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
  69. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
  70. data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
  71. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
  72. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
  73. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
  74. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
  75. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
  76. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
  77. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
  78. data/spec/spec_tests/run_command_unified_spec.rb +13 -0
  79. data/spec/spec_tests/sdam_unified_spec.rb +2 -0
  80. data/spec/support/constraints.rb +6 -0
  81. data/spec/support/ocsp +1 -1
  82. data/spec/support/recording_logger.rb +27 -0
  83. data.tar.gz.sig +0 -0
  84. metadata +1272 -1253
  85. metadata.gz.sig +0 -0
  86. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
@@ -2,10 +2,6 @@ description: "poc-retryable-writes"
2
2
 
3
3
  schemaVersion: "1.0"
4
4
 
5
- runOnRequirements:
6
- - minServerVersion: "3.6"
7
- topologies: [ replicaset ]
8
-
9
5
  createEntities:
10
6
  - client:
11
7
  id: &client0 client0
@@ -42,6 +38,9 @@ initialData:
42
38
 
43
39
  tests:
44
40
  - description: "FindOneAndUpdate is committed on first attempt"
41
+ runOnRequirements: &onPrimaryTransactionalWrite_requirements
42
+ - minServerVersion: "3.6"
43
+ topologies: [ replicaset ]
45
44
  operations:
46
45
  - name: failPoint
47
46
  object: testRunner
@@ -65,6 +64,7 @@ tests:
65
64
  - { _id: 2, x: 22 }
66
65
 
67
66
  - description: "FindOneAndUpdate is not committed on first attempt"
67
+ runOnRequirements: *onPrimaryTransactionalWrite_requirements
68
68
  operations:
69
69
  - name: failPoint
70
70
  object: testRunner
@@ -89,6 +89,7 @@ tests:
89
89
  - { _id: 2, x: 22 }
90
90
 
91
91
  - description: "FindOneAndUpdate is never committed"
92
+ runOnRequirements: *onPrimaryTransactionalWrite_requirements
92
93
  operations:
93
94
  - name: failPoint
94
95
  object: testRunner
@@ -117,9 +118,7 @@ tests:
117
118
  - minServerVersion: "4.0"
118
119
  topologies: [ replicaset ]
119
120
  - minServerVersion: "4.1.7"
120
- # Original test uses "sharded", but retryable writes requires a sharded
121
- # cluster backed by replica sets
122
- topologies: [ sharded-replicaset ]
121
+ topologies: [ sharded ]
123
122
  operations:
124
123
  - name: failPoint
125
124
  object: testRunner
@@ -192,6 +191,7 @@ tests:
192
191
  mode: { times: 2 }
193
192
  data:
194
193
  failCommands: [ insert ]
194
+ errorLabels: [ RetryableWriteError ]
195
195
  writeConcernError:
196
196
  code: 91 # ShutdownInProgress
197
197
  errmsg: "Replication is being shut down"
@@ -125,12 +125,11 @@ tests:
125
125
  - description: "Dirty explicit session is discarded"
126
126
  skipReason: RUBY-1813
127
127
  # Original test specified retryWrites=true, but that is now the default.
128
- # Retryable writes will require a sharded-replicaset, though.
129
128
  runOnRequirements:
130
129
  - minServerVersion: "4.0"
131
130
  topologies: [ replicaset ]
132
131
  - minServerVersion: "4.1.8"
133
- topologies: [ sharded-replicaset ]
132
+ topologies: [ sharded ]
134
133
  operations:
135
134
  - name: failPoint
136
135
  object: testRunner
@@ -181,7 +180,7 @@ tests:
181
180
  - commandStartedEvent: &insert_attempt
182
181
  command:
183
182
  insert: *collection0Name
184
- documents:
183
+ documents:
185
184
  - { _id: 2 }
186
185
  ordered: true
187
186
  lsid: { $$sessionLsid: *session0 }
@@ -192,7 +191,7 @@ tests:
192
191
  - commandStartedEvent:
193
192
  command:
194
193
  insert: *collection0Name
195
- documents:
194
+ documents:
196
195
  - { _id: 3 }
197
196
  ordered: true
198
197
  lsid: { $$sessionLsid: *session0 }
@@ -6,7 +6,7 @@ runOnRequirements:
6
6
  - minServerVersion: "4.0"
7
7
  topologies: [ replicaset ]
8
8
  - minServerVersion: "4.1.8"
9
- topologies: [ sharded-replicaset ]
9
+ topologies: [ sharded ]
10
10
 
11
11
  createEntities:
12
12
  - client:
@@ -4,7 +4,7 @@ schemaVersion: "1.0"
4
4
 
5
5
  runOnRequirements:
6
6
  - minServerVersion: "4.1.8"
7
- topologies: [ sharded-replicaset ]
7
+ topologies: [ sharded ]
8
8
 
9
9
  createEntities:
10
10
  - client:
@@ -6,7 +6,7 @@ runOnRequirements:
6
6
  - minServerVersion: "4.0"
7
7
  topologies: [ replicaset ]
8
8
  - minServerVersion: "4.1.8"
9
- topologies: [ sharded-replicaset ]
9
+ topologies: [ sharded ]
10
10
 
11
11
  createEntities:
12
12
  - client:
@@ -51,7 +51,7 @@ tests:
51
51
  - description: "explicitly create collection using create command"
52
52
  runOnRequirements:
53
53
  - minServerVersion: "4.3.4"
54
- topologies: [ replicaset, sharded-replicaset ]
54
+ topologies: [ replicaset, sharded ]
55
55
  operations:
56
56
  - name: dropCollection
57
57
  object: *database0
@@ -109,7 +109,7 @@ tests:
109
109
  - description: "create index on a non-existing collection"
110
110
  runOnRequirements:
111
111
  - minServerVersion: "4.3.4"
112
- topologies: [ replicaset, sharded-replicaset ]
112
+ topologies: [ replicaset, sharded ]
113
113
  operations:
114
114
  - name: dropCollection
115
115
  object: *database0
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ require 'spec_helper'
5
+
6
+ require 'runners/unified'
7
+
8
+ base = "#{CURRENT_PATH}/spec_tests/data/run_command_unified"
9
+ RUN_COMMAND_UNIFIED_TESTS = Dir.glob("#{base}/**/*.yml").sort
10
+
11
+ describe 'runCommand unified spec tests' do
12
+ define_unified_spec_tests(base, RUN_COMMAND_UNIFIED_TESTS)
13
+ end
@@ -9,5 +9,7 @@ base = "#{CURRENT_PATH}/spec_tests/data/sdam_unified"
9
9
  SDAM_UNIFIED_TESTS = Dir.glob("#{base}/**/*.yml").sort
10
10
 
11
11
  describe 'SDAM unified spec tests' do
12
+ forbid_x509_auth
13
+
12
14
  define_unified_spec_tests(base, SDAM_UNIFIED_TESTS)
13
15
  end
@@ -17,6 +17,12 @@ module Constraints
17
17
  end
18
18
  end
19
19
 
20
+ def forbid_x509_auth
21
+ before(:all) do
22
+ skip 'X.509 auth not allowed' if SpecConfig.instance.x509_auth?
23
+ end
24
+ end
25
+
20
26
  def max_bson_version(version)
21
27
  required_version = version.split('.').map(&:to_i)
22
28
  actual_version = bson_version(required_version.length)
data/spec/support/ocsp CHANGED
@@ -1 +1 @@
1
- spec/support/../../.mod/drivers-evergreen-tools/.evergreen/ocsp
1
+ ../../.mod/drivers-evergreen-tools/.evergreen/ocsp
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ require 'stringio'
5
+
6
+ # A "Logger-alike" class, quacking like ::Logger, used for recording messages
7
+ # as they are written to the log
8
+ class RecordingLogger < Logger
9
+ def initialize(*args, **kwargs)
10
+ @buffer = StringIO.new
11
+ super(@buffer, *args, **kwargs)
12
+ end
13
+
14
+ # Accesses the raw contents of the log
15
+ #
16
+ # @return [ String ] the raw contents of the log
17
+ def contents
18
+ @buffer.string
19
+ end
20
+
21
+ # Returns the contents of the log as individual lines.
22
+ #
23
+ # @return [ Array<String> ] the individual log lines
24
+ def lines
25
+ contents.split(/\n/)
26
+ end
27
+ end
data.tar.gz.sig CHANGED
Binary file