mongo 2.5.0.beta → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/unix.rb +1 -1
- data/lib/mongo/auth/user.rb +0 -5
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/bulk_write.rb +60 -32
- data/lib/mongo/client.rb +44 -8
- data/lib/mongo/cluster.rb +14 -12
- data/lib/mongo/cluster/periodic_executor.rb +106 -0
- data/lib/mongo/cluster/{cursor_reaper.rb → reapers/cursor_reaper.rb} +5 -37
- data/lib/mongo/cluster/reapers/socket_reaper.rb +59 -0
- data/lib/mongo/collection.rb +9 -6
- data/lib/mongo/collection/view.rb +2 -2
- data/lib/mongo/collection/view/builder/aggregation.rb +2 -1
- data/lib/mongo/collection/view/builder/find_command.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +14 -1
- data/lib/mongo/collection/view/map_reduce.rb +30 -13
- data/lib/mongo/collection/view/readable.rb +5 -5
- data/lib/mongo/collection/view/writable.rb +98 -51
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/error/invalid_txt_record.rb +27 -0
- data/lib/mongo/error/invalid_uri.rb +7 -6
- data/lib/mongo/error/mismatched_domain.rb +27 -0
- data/lib/mongo/error/no_srv_records.rb +26 -0
- data/lib/mongo/error/unsupported_features.rb +0 -18
- data/lib/mongo/index/view.rb +2 -2
- data/lib/mongo/operation.rb +1 -0
- data/lib/mongo/operation/causally_consistent.rb +33 -0
- data/lib/mongo/operation/commands.rb +2 -1
- data/lib/mongo/operation/commands/aggregate.rb +2 -7
- data/lib/mongo/operation/commands/count.rb +27 -0
- data/lib/mongo/operation/commands/distinct.rb +27 -0
- data/lib/mongo/operation/commands/find.rb +3 -1
- data/lib/mongo/operation/commands/map_reduce.rb +1 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +1 -0
- data/lib/mongo/operation/specifiable.rb +12 -0
- data/lib/mongo/operation/uses_command_op_msg.rb +36 -5
- data/lib/mongo/operation/write.rb +0 -5
- data/lib/mongo/operation/write/bulk/bulkable.rb +4 -8
- data/lib/mongo/operation/write/bulk/mergable.rb +2 -0
- data/lib/mongo/operation/write/command/create_index.rb +19 -0
- data/lib/mongo/operation/write/command/create_user.rb +19 -0
- data/lib/mongo/operation/write/command/delete.rb +1 -2
- data/lib/mongo/operation/write/command/drop_index.rb +19 -0
- data/lib/mongo/operation/write/command/insert.rb +1 -2
- data/lib/mongo/operation/write/command/remove_user.rb +19 -0
- data/lib/mongo/operation/write/command/update.rb +1 -2
- data/lib/mongo/operation/write/command/update_user.rb +19 -0
- data/lib/mongo/operation/write/write_command_enabled.rb +1 -3
- data/lib/mongo/protocol/compressed.rb +2 -1
- data/lib/mongo/protocol/serializers.rb +6 -6
- data/lib/mongo/retryable.rb +48 -5
- data/lib/mongo/server.rb +15 -0
- data/lib/mongo/server/connection.rb +21 -1
- data/lib/mongo/server/connection_pool.rb +3 -0
- data/lib/mongo/server/connection_pool/queue.rb +50 -5
- data/lib/mongo/server/description.rb +11 -3
- data/lib/mongo/server/description/features.rb +26 -7
- data/lib/mongo/session.rb +133 -6
- data/lib/mongo/session/server_session.rb +30 -0
- data/lib/mongo/session/session_pool.rb +20 -20
- data/lib/mongo/uri.rb +88 -44
- data/lib/mongo/uri/srv_protocol.rb +158 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/normalizable.rb +12 -0
- data/mongo.gemspec +1 -2
- data/spec/mongo/address_spec.rb +12 -0
- data/spec/mongo/auth/user/view_spec.rb +1 -5
- data/spec/mongo/bulk_write_spec.rb +232 -401
- data/spec/mongo/change_stream_examples_spec.rb +150 -0
- data/spec/mongo/client_spec.rb +142 -2
- data/spec/mongo/cluster/cursor_reaper_spec.rb +0 -70
- data/spec/mongo/cluster/socket_reaper_spec.rb +32 -0
- data/spec/mongo/cluster_spec.rb +11 -7
- data/spec/mongo/collection/view/aggregation_spec.rb +46 -1
- data/spec/mongo/collection/view/builder/find_command_spec.rb +15 -0
- data/spec/mongo/collection/view/change_stream_spec.rb +79 -12
- data/spec/mongo/collection/view/map_reduce_spec.rb +120 -4
- data/spec/mongo/collection/view/readable_spec.rb +23 -5
- data/spec/mongo/collection_spec.rb +292 -102
- data/spec/mongo/command_monitoring_spec.rb +26 -32
- data/spec/mongo/crud_spec.rb +1 -1
- data/spec/mongo/cursor_spec.rb +2 -3
- data/spec/mongo/database_spec.rb +30 -14
- data/spec/mongo/dns_seedlist_discovery_spec.rb +94 -0
- data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
- data/spec/mongo/grid/stream/write_spec.rb +1 -1
- data/spec/mongo/index/view_spec.rb +8 -46
- data/spec/mongo/operation/write/bulk/delete_spec.rb +2 -2
- data/spec/mongo/operation/write/bulk/insert_spec.rb +2 -10
- data/spec/mongo/operation/write/{create_index_spec.rb → command/create_index_spec.rb} +2 -6
- data/spec/mongo/operation/write/command/delete_spec.rb +35 -7
- data/spec/mongo/operation/write/{drop_index_spec.rb → command/drop_index_spec.rb} +1 -1
- data/spec/mongo/operation/write/command/insert_spec.rb +37 -6
- data/spec/mongo/operation/write/{remove_user_spec.rb → command/remove_user_spec.rb} +2 -6
- data/spec/mongo/operation/write/command/update_spec.rb +34 -7
- data/spec/mongo/operation/write/{update_user_spec.rb → command/update_user_spec.rb} +1 -1
- data/spec/mongo/operation/write/create_user_spec.rb +1 -1
- data/spec/mongo/operation/write/delete_spec.rb +1 -1
- data/spec/mongo/operation/write/insert_spec.rb +2 -10
- data/spec/mongo/operation/write/update_spec.rb +3 -15
- data/spec/mongo/retryable_spec.rb +1 -1
- data/spec/mongo/retryable_writes_spec.rb +815 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +35 -2
- data/spec/mongo/server/connection_pool_spec.rb +234 -1
- data/spec/mongo/server/connection_spec.rb +10 -6
- data/spec/mongo/server/description/features_spec.rb +51 -37
- data/spec/mongo/server/description_spec.rb +6 -3
- data/spec/mongo/server_spec.rb +87 -0
- data/spec/mongo/session/server_session_spec.rb +43 -0
- data/spec/mongo/session/session_pool_spec.rb +63 -27
- data/spec/mongo/session_spec.rb +247 -0
- data/spec/mongo/shell_examples_spec.rb +2 -2
- data/spec/mongo/uri/srv_protocol_spec.rb +933 -0
- data/spec/mongo/uri_spec.rb +42 -3
- data/spec/mongo/write_concern/acknowledged_spec.rb +11 -0
- data/spec/mongo/write_concern/unacknowledged_spec.rb +11 -0
- data/spec/spec_helper.rb +11 -25
- data/spec/support/authorization.rb +2 -1
- data/spec/support/connection_string.rb +8 -4
- data/spec/support/crud.rb +38 -24
- data/spec/support/crud/write.rb +30 -3
- data/spec/support/crud_tests/read/aggregate-out.yml +21 -0
- data/spec/support/crud_tests/write/bulkWrite-arrayFilters.yml +44 -0
- data/spec/support/crud_tests/write/findOneAndUpdate-arrayFilters.yml +1 -1
- data/spec/support/crud_tests/write/insertMany.yml +1 -3
- data/spec/support/crud_tests/write/replaceOne.yml +1 -1
- data/spec/support/crud_tests/write/updateMany-arrayFilters.yml +1 -1
- data/spec/support/crud_tests/write/updateOne-arrayFilters.yml +1 -1
- data/spec/support/dns_seedlist_discovery_tests/longer-parent-in-return.yml +11 -0
- data/spec/support/dns_seedlist_discovery_tests/misformatted-option.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/no-results.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/not-enough-parts.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/one-result-default-port.yml +10 -0
- data/spec/support/dns_seedlist_discovery_tests/one-txt-record-multiple-strings.yml +10 -0
- data/spec/support/dns_seedlist_discovery_tests/one-txt-record.yml +11 -0
- data/spec/support/dns_seedlist_discovery_tests/parent-part-mismatch1.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/parent-part-mismatch2.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/parent-part-mismatch3.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/parent-part-mismatch4.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/parent-part-mismatch5.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/returned-parent-too-short.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/returned-parent-wrong.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/two-results-default-port.yml +11 -0
- data/spec/support/dns_seedlist_discovery_tests/two-results-nonstandard-port.yml +11 -0
- data/spec/support/dns_seedlist_discovery_tests/two-txt-records.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/txt-record-not-allowed-option.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/txt-record-with-overridden-ssl-option.yml +11 -0
- data/spec/support/dns_seedlist_discovery_tests/txt-record-with-overridden-uri-option.yml +11 -0
- data/spec/support/dns_seedlist_discovery_tests/txt-record-with-unallowed-option.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/uri-with-port.yml +5 -0
- data/spec/support/dns_seedlist_discovery_tests/uri-with-two-hosts.yml +5 -0
- data/spec/support/retryable_writes_tests/bulkWrite.yml +305 -0
- data/spec/support/retryable_writes_tests/deleteOne.yml +51 -0
- data/spec/support/retryable_writes_tests/findOneAndDelete.yml +52 -0
- data/spec/support/retryable_writes_tests/findOneAndReplace.yml +57 -0
- data/spec/support/retryable_writes_tests/findOneAndUpdate.yml +56 -0
- data/spec/support/retryable_writes_tests/insertMany.yml +72 -0
- data/spec/support/retryable_writes_tests/insertOne.yml +55 -0
- data/spec/support/retryable_writes_tests/replaceOne.yml +60 -0
- data/spec/support/retryable_writes_tests/updateOne.yml +120 -0
- data/spec/support/shared/session.rb +525 -24
- metadata +437 -350
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/commands/user_query.rb +0 -72
- data/lib/mongo/operation/write/create_index.rb +0 -67
- data/lib/mongo/operation/write/create_user.rb +0 -50
- data/lib/mongo/operation/write/drop_index.rb +0 -63
- data/lib/mongo/operation/write/remove_user.rb +0 -48
- data/lib/mongo/operation/write/update_user.rb +0 -50
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Mongo::Operation::Write::CreateIndex do
|
3
|
+
describe Mongo::Operation::Write::Command::CreateIndex do
|
4
4
|
|
5
5
|
describe '#execute' do
|
6
6
|
|
@@ -49,15 +49,11 @@ describe Mongo::Operation::Write::CreateIndex do
|
|
49
49
|
authorized_collection.indexes.drop_one('random_1')
|
50
50
|
end
|
51
51
|
|
52
|
-
it 'raises an exception'
|
52
|
+
it 'raises an exception' do
|
53
53
|
expect {
|
54
54
|
second_operation.execute(authorized_primary)
|
55
55
|
}.to raise_error(Mongo::Error::OperationFailure)
|
56
56
|
end
|
57
|
-
|
58
|
-
it 'does not raise an exception', unless: write_command_enabled? do
|
59
|
-
expect(second_operation.execute(authorized_primary)).to be_successful
|
60
|
-
end
|
61
57
|
end
|
62
58
|
end
|
63
59
|
end
|
@@ -6,13 +6,15 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
6
6
|
Mongo::WriteConcern.get(WRITE_CONCERN)
|
7
7
|
end
|
8
8
|
|
9
|
+
let(:session) { nil }
|
9
10
|
let(:deletes) { [{:q => { :foo => 1 }, :limit => 1}] }
|
10
11
|
let(:spec) do
|
11
12
|
{ :deletes => deletes,
|
12
13
|
:db_name => authorized_collection.database.name,
|
13
14
|
:coll_name => authorized_collection.name,
|
14
15
|
:write_concern => write_concern,
|
15
|
-
:ordered => true
|
16
|
+
:ordered => true,
|
17
|
+
:session => session
|
16
18
|
}
|
17
19
|
end
|
18
20
|
|
@@ -93,7 +95,8 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
93
95
|
delete: TEST_COLL,
|
94
96
|
ordered: true,
|
95
97
|
writeConcern: write_concern.options,
|
96
|
-
'$db' => TEST_DB
|
98
|
+
'$db' => TEST_DB,
|
99
|
+
lsid: session.session_id
|
97
100
|
}
|
98
101
|
end
|
99
102
|
|
@@ -106,7 +109,11 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
106
109
|
}
|
107
110
|
end
|
108
111
|
|
109
|
-
|
112
|
+
let(:session) do
|
113
|
+
authorized_client.start_session
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
|
110
117
|
|
111
118
|
let(:expected_global_args) do
|
112
119
|
global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
@@ -119,7 +126,7 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
119
126
|
end
|
120
127
|
end
|
121
128
|
|
122
|
-
context 'when the topology is
|
129
|
+
context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
|
123
130
|
|
124
131
|
let(:expected_global_args) do
|
125
132
|
global_args
|
@@ -130,6 +137,25 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
130
137
|
expect(Mongo::Protocol::Msg).to receive(:new).with([:none], {}, expected_global_args, expected_payload_1)
|
131
138
|
op.send(:message, authorized_primary)
|
132
139
|
end
|
140
|
+
|
141
|
+
context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
|
142
|
+
|
143
|
+
let(:expected_global_args) do
|
144
|
+
global_args.delete(:lsid)
|
145
|
+
global_args
|
146
|
+
end
|
147
|
+
|
148
|
+
before do
|
149
|
+
session.instance_variable_set(:@options, { implicit: true })
|
150
|
+
allow(authorized_primary.features).to receive(:sessions_enabled?).and_return(false)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'creates the correct OP_MSG message' do
|
154
|
+
authorized_client.command(ping:1)
|
155
|
+
expect(Mongo::Protocol::Msg).to receive(:new).with([:none], {}, expected_global_args, expected_payload_1)
|
156
|
+
op.send(:message, authorized_primary)
|
157
|
+
end
|
158
|
+
end
|
133
159
|
end
|
134
160
|
|
135
161
|
context 'when the write concern is 0' do
|
@@ -138,10 +164,11 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
138
164
|
Mongo::WriteConcern.get(w: 0)
|
139
165
|
end
|
140
166
|
|
141
|
-
context 'when the topology is sharded', if: sharded? && op_msg_enabled? do
|
167
|
+
context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
|
142
168
|
|
143
169
|
let(:expected_global_args) do
|
144
|
-
global_args.
|
170
|
+
global_args.delete(:lsid)
|
171
|
+
global_args.merge!(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
145
172
|
end
|
146
173
|
|
147
174
|
it 'creates the correct OP_MSG message' do
|
@@ -151,9 +178,10 @@ describe Mongo::Operation::Write::Command::Delete do
|
|
151
178
|
end
|
152
179
|
end
|
153
180
|
|
154
|
-
context 'when the topology is
|
181
|
+
context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
|
155
182
|
|
156
183
|
let(:expected_global_args) do
|
184
|
+
global_args.delete(:lsid)
|
157
185
|
global_args
|
158
186
|
end
|
159
187
|
|
@@ -3,12 +3,14 @@ require 'spec_helper'
|
|
3
3
|
describe Mongo::Operation::Write::Command::Insert do
|
4
4
|
|
5
5
|
let(:documents) { [{ :_id => 1, :foo => 1 }] }
|
6
|
+
let(:session) { nil }
|
6
7
|
let(:spec) do
|
7
8
|
{ :documents => documents,
|
8
9
|
:db_name => authorized_collection.database.name,
|
9
10
|
:coll_name => authorized_collection.name,
|
10
11
|
:write_concern => write_concern,
|
11
|
-
:ordered => true
|
12
|
+
:ordered => true,
|
13
|
+
:session => session
|
12
14
|
}
|
13
15
|
end
|
14
16
|
|
@@ -97,7 +99,8 @@ describe Mongo::Operation::Write::Command::Insert do
|
|
97
99
|
insert: TEST_COLL,
|
98
100
|
ordered: true,
|
99
101
|
writeConcern: write_concern.options,
|
100
|
-
'$db' => TEST_DB
|
102
|
+
'$db' => TEST_DB,
|
103
|
+
lsid: session.session_id
|
101
104
|
}
|
102
105
|
end
|
103
106
|
|
@@ -110,7 +113,11 @@ describe Mongo::Operation::Write::Command::Insert do
|
|
110
113
|
}
|
111
114
|
end
|
112
115
|
|
113
|
-
|
116
|
+
let(:session) do
|
117
|
+
authorized_client.start_session
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
|
114
121
|
|
115
122
|
let(:expected_global_args) do
|
116
123
|
global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
@@ -126,7 +133,7 @@ describe Mongo::Operation::Write::Command::Insert do
|
|
126
133
|
end
|
127
134
|
end
|
128
135
|
|
129
|
-
context 'when the topology is
|
136
|
+
context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
|
130
137
|
|
131
138
|
let(:expected_global_args) do
|
132
139
|
global_args
|
@@ -140,6 +147,28 @@ describe Mongo::Operation::Write::Command::Insert do
|
|
140
147
|
expected_payload_1)
|
141
148
|
op.send(:message, authorized_primary)
|
142
149
|
end
|
150
|
+
|
151
|
+
context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
|
152
|
+
|
153
|
+
let(:expected_global_args) do
|
154
|
+
global_args.delete(:lsid)
|
155
|
+
global_args
|
156
|
+
end
|
157
|
+
|
158
|
+
before do
|
159
|
+
session.instance_variable_set(:@options, { implicit: true })
|
160
|
+
allow(authorized_primary.features).to receive(:sessions_enabled?).and_return(false)
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'creates the correct OP_MSG message' do
|
164
|
+
authorized_client.command(ping:1)
|
165
|
+
expect(Mongo::Protocol::Msg).to receive(:new).with([:none],
|
166
|
+
{ validating_keys: true },
|
167
|
+
expected_global_args,
|
168
|
+
expected_payload_1)
|
169
|
+
op.send(:message, authorized_primary)
|
170
|
+
end
|
171
|
+
end
|
143
172
|
end
|
144
173
|
|
145
174
|
context 'when the write concern is 0' do
|
@@ -148,9 +177,10 @@ describe Mongo::Operation::Write::Command::Insert do
|
|
148
177
|
Mongo::WriteConcern.get(w: 0)
|
149
178
|
end
|
150
179
|
|
151
|
-
context 'when the topology is sharded', if: sharded? && op_msg_enabled? do
|
180
|
+
context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
|
152
181
|
|
153
182
|
let(:expected_global_args) do
|
183
|
+
global_args.delete(:lsid)
|
154
184
|
global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
155
185
|
end
|
156
186
|
|
@@ -164,9 +194,10 @@ describe Mongo::Operation::Write::Command::Insert do
|
|
164
194
|
end
|
165
195
|
end
|
166
196
|
|
167
|
-
context 'when the topology is
|
197
|
+
context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
|
168
198
|
|
169
199
|
let(:expected_global_args) do
|
200
|
+
global_args.delete(:lsid)
|
170
201
|
global_args
|
171
202
|
end
|
172
203
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Mongo::Operation::Write::RemoveUser do
|
3
|
+
describe Mongo::Operation::Write::Command::RemoveUser do
|
4
4
|
|
5
5
|
describe '#execute' do
|
6
6
|
|
@@ -32,15 +32,11 @@ describe Mongo::Operation::Write::RemoveUser do
|
|
32
32
|
operation.execute(root_authorized_primary)
|
33
33
|
end
|
34
34
|
|
35
|
-
it 'raises an exception'
|
35
|
+
it 'raises an exception' do
|
36
36
|
expect {
|
37
37
|
operation.execute(root_authorized_primary)
|
38
38
|
}.to raise_error(Mongo::Error::OperationFailure)
|
39
39
|
end
|
40
|
-
|
41
|
-
it 'does not raise an exception', unless: write_command_enabled? do
|
42
|
-
expect(operation.execute(root_authorized_primary).written_count).to eq(0)
|
43
|
-
end
|
44
40
|
end
|
45
41
|
end
|
46
42
|
end
|
@@ -10,13 +10,14 @@ describe Mongo::Operation::Write::Command::Update do
|
|
10
10
|
let(:write_concern) do
|
11
11
|
Mongo::WriteConcern.get(WRITE_CONCERN)
|
12
12
|
end
|
13
|
-
|
13
|
+
let(:session) { nil }
|
14
14
|
let(:spec) do
|
15
15
|
{ :updates => updates,
|
16
16
|
:db_name => TEST_DB,
|
17
17
|
:coll_name => TEST_COLL,
|
18
18
|
:write_concern => write_concern,
|
19
|
-
:ordered => true
|
19
|
+
:ordered => true,
|
20
|
+
:session => session
|
20
21
|
}
|
21
22
|
end
|
22
23
|
|
@@ -100,7 +101,8 @@ describe Mongo::Operation::Write::Command::Update do
|
|
100
101
|
update: TEST_COLL,
|
101
102
|
ordered: true,
|
102
103
|
writeConcern: write_concern.options,
|
103
|
-
'$db' => TEST_DB
|
104
|
+
'$db' => TEST_DB,
|
105
|
+
lsid: session.session_id
|
104
106
|
}
|
105
107
|
end
|
106
108
|
|
@@ -113,7 +115,11 @@ describe Mongo::Operation::Write::Command::Update do
|
|
113
115
|
}
|
114
116
|
end
|
115
117
|
|
116
|
-
|
118
|
+
let(:session) do
|
119
|
+
authorized_client.start_session
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
|
117
123
|
|
118
124
|
let(:expected_global_args) do
|
119
125
|
global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
@@ -126,7 +132,7 @@ describe Mongo::Operation::Write::Command::Update do
|
|
126
132
|
end
|
127
133
|
end
|
128
134
|
|
129
|
-
context 'when the topology is
|
135
|
+
context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
|
130
136
|
|
131
137
|
let(:expected_global_args) do
|
132
138
|
global_args
|
@@ -137,6 +143,25 @@ describe Mongo::Operation::Write::Command::Update do
|
|
137
143
|
expect(Mongo::Protocol::Msg).to receive(:new).with([:none], {}, expected_global_args, expected_payload_1)
|
138
144
|
op.send(:message, authorized_primary)
|
139
145
|
end
|
146
|
+
|
147
|
+
context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
|
148
|
+
|
149
|
+
let(:expected_global_args) do
|
150
|
+
global_args.delete(:lsid)
|
151
|
+
global_args
|
152
|
+
end
|
153
|
+
|
154
|
+
before do
|
155
|
+
session.instance_variable_set(:@options, { implicit: true })
|
156
|
+
allow(authorized_primary.features).to receive(:sessions_enabled?).and_return(false)
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'creates the correct OP_MSG message' do
|
160
|
+
authorized_client.command(ping:1)
|
161
|
+
expect(Mongo::Protocol::Msg).to receive(:new).with([:none], {}, expected_global_args, expected_payload_1)
|
162
|
+
op.send(:message, authorized_primary)
|
163
|
+
end
|
164
|
+
end
|
140
165
|
end
|
141
166
|
|
142
167
|
context 'when the write concern is 0' do
|
@@ -145,9 +170,10 @@ describe Mongo::Operation::Write::Command::Update do
|
|
145
170
|
Mongo::WriteConcern.get(w: 0)
|
146
171
|
end
|
147
172
|
|
148
|
-
context 'when the topology is sharded', if: sharded? && op_msg_enabled? do
|
173
|
+
context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
|
149
174
|
|
150
175
|
let(:expected_global_args) do
|
176
|
+
global_args.delete(:lsid)
|
151
177
|
global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
152
178
|
end
|
153
179
|
|
@@ -158,9 +184,10 @@ describe Mongo::Operation::Write::Command::Update do
|
|
158
184
|
end
|
159
185
|
end
|
160
186
|
|
161
|
-
context 'when the topology is
|
187
|
+
context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
|
162
188
|
|
163
189
|
let(:expected_global_args) do
|
190
|
+
global_args.delete(:lsid)
|
164
191
|
global_args
|
165
192
|
end
|
166
193
|
|
@@ -115,14 +115,10 @@ describe Mongo::Operation::Write::Insert do
|
|
115
115
|
insert.execute(authorized_primary)
|
116
116
|
end
|
117
117
|
|
118
|
-
it 'reports the correct written count'
|
118
|
+
it 'reports the correct written count' do
|
119
119
|
expect(response.written_count).to eq(1)
|
120
120
|
end
|
121
121
|
|
122
|
-
it 'reports the correct written count', unless: write_command_enabled? do
|
123
|
-
expect(response.written_count).to eq(0)
|
124
|
-
end
|
125
|
-
|
126
122
|
it 'inserts the document into the collection' do
|
127
123
|
expect(authorized_collection.find(_id: 1).to_a). to eq(documents)
|
128
124
|
end
|
@@ -170,14 +166,10 @@ describe Mongo::Operation::Write::Insert do
|
|
170
166
|
insert.execute(authorized_primary)
|
171
167
|
end
|
172
168
|
|
173
|
-
it 'reports the correct written count'
|
169
|
+
it 'reports the correct written count' do
|
174
170
|
expect(response.written_count).to eq(2)
|
175
171
|
end
|
176
172
|
|
177
|
-
it 'reports the correct written count', unless: write_command_enabled? do
|
178
|
-
expect(response.written_count).to eq(0)
|
179
|
-
end
|
180
|
-
|
181
173
|
it 'inserts the documents into the collection' do
|
182
174
|
expect(authorized_collection.find.to_a). to eq(documents)
|
183
175
|
end
|
@@ -106,14 +106,10 @@ describe Mongo::Operation::Write::Update do
|
|
106
106
|
expect(result.written_count).to eq(1)
|
107
107
|
end
|
108
108
|
|
109
|
-
it 'reports the modified count'
|
109
|
+
it 'reports the modified count' do
|
110
110
|
expect(result.modified_count).to eq(1)
|
111
111
|
end
|
112
112
|
|
113
|
-
it 'returns nil for the modified count', unless: write_command_enabled? do
|
114
|
-
expect(result.modified_count).to be_nil
|
115
|
-
end
|
116
|
-
|
117
113
|
it 'reports the matched count' do
|
118
114
|
expect(result.matched_count).to eq(1)
|
119
115
|
end
|
@@ -162,14 +158,10 @@ describe Mongo::Operation::Write::Update do
|
|
162
158
|
expect(result.written_count).to eq(2)
|
163
159
|
end
|
164
160
|
|
165
|
-
it 'reports the modified count'
|
161
|
+
it 'reports the modified count' do
|
166
162
|
expect(result.modified_count).to eq(2)
|
167
163
|
end
|
168
164
|
|
169
|
-
it 'returns nil for the modified count', unless: write_command_enabled? do
|
170
|
-
expect(result.modified_count).to be_nil
|
171
|
-
end
|
172
|
-
|
173
165
|
it 'reports the matched count' do
|
174
166
|
expect(result.matched_count).to eq(2)
|
175
167
|
end
|
@@ -219,14 +211,10 @@ describe Mongo::Operation::Write::Update do
|
|
219
211
|
expect(result.written_count).to eq(1)
|
220
212
|
end
|
221
213
|
|
222
|
-
it 'reports the modified count'
|
214
|
+
it 'reports the modified count' do
|
223
215
|
expect(result.modified_count).to eq(0)
|
224
216
|
end
|
225
217
|
|
226
|
-
it 'returns nil for the modified count', unless: write_command_enabled? do
|
227
|
-
expect(result.modified_count).to be_nil
|
228
|
-
end
|
229
|
-
|
230
218
|
it 'reports the matched count' do
|
231
219
|
expect(result.matched_count).to eq(0)
|
232
220
|
end
|