mongo 2.0.6 → 2.1.0
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 +4 -4
- checksums.yaml.gz.sig +5 -2
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +18 -10
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +7 -3
- data/lib/mongo/auth/scram/conversation.rb +9 -3
- data/lib/mongo/auth/user/view.rb +23 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +191 -0
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +132 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/bulk_write.rb +159 -23
- data/lib/mongo/client.rb +52 -16
- data/lib/mongo/cluster/topology/replica_set.rb +27 -9
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +42 -7
- data/lib/mongo/collection/view/aggregation.rb +48 -9
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +18 -4
- data/lib/mongo/collection/view/map_reduce.rb +58 -17
- data/lib/mongo/collection/view/readable.rb +173 -42
- data/lib/mongo/collection/view/writable.rb +37 -23
- data/lib/mongo/collection/view.rb +2 -2
- data/lib/mongo/collection.rb +370 -33
- data/lib/mongo/cursor.rb +15 -3
- data/lib/mongo/database/view.rb +5 -4
- data/lib/mongo/database.rb +14 -4
- data/lib/mongo/dbref.rb +113 -0
- data/lib/mongo/error/closed_stream.rb +34 -0
- data/lib/mongo/error/extra_file_chunk.rb +34 -0
- data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/error.rb +13 -2
- data/lib/mongo/event/description_changed.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +13 -10
- data/lib/mongo/grid/fs_bucket.rb +448 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
- data/lib/mongo/monitoring/event/command_failed.rb +96 -0
- data/lib/mongo/monitoring/event/command_started.rb +89 -0
- data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +18 -0
- data/lib/mongo/monitoring/publishable.rb +106 -0
- data/lib/mongo/monitoring.rb +195 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
- data/lib/mongo/operation/commands/collections_info.rb +68 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
- data/lib/mongo/operation/read/query.rb +4 -21
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/result.rb +13 -1
- data/lib/mongo/operation/specifiable.rb +42 -0
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +6 -29
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +13 -36
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation.rb +32 -4
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/delete.rb +75 -15
- data/lib/mongo/protocol/get_more.rb +65 -13
- data/lib/mongo/protocol/insert.rb +85 -13
- data/lib/mongo/protocol/kill_cursors.rb +59 -14
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +163 -37
- data/lib/mongo/protocol/reply.rb +103 -0
- data/lib/mongo/protocol/serializers.rb +1 -1
- data/lib/mongo/protocol/update.rb +82 -14
- data/lib/mongo/retryable.rb +83 -0
- data/lib/mongo/server/connectable.rb +21 -25
- data/lib/mongo/server/connection.rb +75 -4
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/description.rb +52 -1
- data/lib/mongo/server/monitor/connection.rb +26 -2
- data/lib/mongo/server/monitor.rb +19 -3
- data/lib/mongo/server.rb +39 -5
- data/lib/mongo/server_selector/selectable.rb +40 -31
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +28 -16
- data/lib/mongo/socket/tcp.rb +3 -3
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +248 -137
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +5 -3
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/cr_spec.rb +9 -1
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/ldap_spec.rb +9 -1
- data/spec/mongo/auth/scram_spec.rb +9 -1
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/auth/x509_spec.rb +9 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +428 -0
- data/spec/mongo/client_spec.rb +167 -17
- data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
- data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
- data/spec/mongo/cluster/topology/single_spec.rb +12 -4
- data/spec/mongo/cluster_spec.rb +55 -10
- data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
- data/spec/mongo/collection/view/readable_spec.rb +238 -6
- data/spec/mongo/collection/view/writable_spec.rb +4 -4
- data/spec/mongo/collection/view_spec.rb +459 -71
- data/spec/mongo/collection_spec.rb +1291 -9
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/crud_spec.rb +2 -2
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/database_spec.rb +47 -11
- data/spec/mongo/dbref_spec.rb +149 -0
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/monitoring_spec.rb +168 -0
- data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
- data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
- data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
- data/spec/mongo/operation/write/command/update_spec.rb +0 -16
- data/spec/mongo/operation/write/delete_spec.rb +4 -4
- data/spec/mongo/operation/write/insert_spec.rb +2 -13
- data/spec/mongo/operation/write/update_spec.rb +7 -7
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/protocol/query_spec.rb +15 -30
- data/spec/mongo/retryable_spec.rb +147 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +50 -6
- data/spec/mongo/server/connection_spec.rb +49 -4
- data/spec/mongo/server/description_spec.rb +49 -3
- data/spec/mongo/server/monitor_spec.rb +51 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +19 -9
- data/spec/mongo/server_selector/nearest_spec.rb +35 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
- data/spec/mongo/server_selector/primary_spec.rb +21 -14
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
- data/spec/mongo/server_selector/secondary_spec.rb +24 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/server_spec.rb +94 -8
- data/spec/mongo/socket/ssl_spec.rb +123 -13
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +295 -67
- data/spec/spec_helper.rb +40 -24
- data/spec/support/authorization.rb +23 -9
- data/spec/support/certificates/client.pem +4 -4
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud/read.rb +22 -19
- data/spec/support/crud/write.rb +58 -27
- data/spec/support/crud.rb +10 -2
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/matchers.rb +1 -1
- data/spec/support/sdam/rs/equal_electionids.yml +44 -0
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
- data/spec/support/sdam/rs/null_election_id.yml +144 -0
- data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +22 -3
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +218 -22
- data/spec/support/shared/server_selector.rb +80 -14
- data.tar.gz.sig +0 -0
- metadata +188 -59
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
- data/lib/mongo/bulk_write/deletable.rb +0 -56
- data/lib/mongo/bulk_write/insertable.rb +0 -48
- data/lib/mongo/bulk_write/replacable.rb +0 -57
- data/lib/mongo/bulk_write/updatable.rb +0 -68
- data/lib/mongo/grid/fs.rb +0 -149
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
- /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
@@ -2,14 +2,16 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongo::ServerSelector::SecondaryPreferred do
|
4
4
|
|
5
|
+
let(:name) { :secondary_preferred }
|
6
|
+
|
5
7
|
include_context 'server selector'
|
6
8
|
|
7
|
-
it_behaves_like 'a
|
8
|
-
let(:name) { :secondary_preferred }
|
9
|
+
it_behaves_like 'a server selector mode' do
|
9
10
|
let(:slave_ok) { true }
|
10
11
|
end
|
12
|
+
it_behaves_like 'a server selector with sensitive data in its options'
|
11
13
|
|
12
|
-
it_behaves_like 'a
|
14
|
+
it_behaves_like 'a server selector accepting tag sets'
|
13
15
|
|
14
16
|
describe '#to_mongos' do
|
15
17
|
|
@@ -20,7 +22,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
20
22
|
end
|
21
23
|
|
22
24
|
it 'returns a read preference formatted for mongos' do
|
23
|
-
expect(
|
25
|
+
expect(selector.to_mongos).to eq(
|
24
26
|
{ :mode => 'secondaryPreferred', :tags => tag_sets }
|
25
27
|
)
|
26
28
|
end
|
@@ -29,7 +31,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
29
31
|
context 'tag sets not provided' do
|
30
32
|
|
31
33
|
it 'returns nil' do
|
32
|
-
expect(
|
34
|
+
expect(selector.to_mongos).to be_nil
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -40,7 +42,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
40
42
|
let(:candidates) { [] }
|
41
43
|
|
42
44
|
it 'returns an empty array' do
|
43
|
-
expect(
|
45
|
+
expect(selector.send(:select, candidates)).to be_empty
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
@@ -48,7 +50,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
48
50
|
let(:candidates) { [primary] }
|
49
51
|
|
50
52
|
it 'returns array with primary' do
|
51
|
-
expect(
|
53
|
+
expect(selector.send(:select, candidates)).to eq([primary])
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
@@ -56,7 +58,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
56
58
|
let(:candidates) { [secondary] }
|
57
59
|
|
58
60
|
it 'returns array with secondary' do
|
59
|
-
expect(
|
61
|
+
expect(selector.send(:select, candidates)).to eq([secondary])
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
@@ -65,7 +67,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
65
67
|
let(:expected) { [secondary, primary] }
|
66
68
|
|
67
69
|
it 'returns array with secondary first, then primary' do
|
68
|
-
expect(
|
70
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
@@ -74,7 +76,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
74
76
|
let(:expected) { [secondary, primary] }
|
75
77
|
|
76
78
|
it 'returns array with secondary and primary' do
|
77
|
-
expect(
|
79
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
78
80
|
end
|
79
81
|
end
|
80
82
|
|
@@ -98,7 +100,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
98
100
|
let(:candidates) { [primary] }
|
99
101
|
|
100
102
|
it 'returns array with primary' do
|
101
|
-
expect(
|
103
|
+
expect(selector.send(:select, candidates)).to eq([primary])
|
102
104
|
end
|
103
105
|
end
|
104
106
|
|
@@ -106,7 +108,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
106
108
|
let(:candidates) { [matching_primary] }
|
107
109
|
|
108
110
|
it 'returns array with matching primary' do
|
109
|
-
expect(
|
111
|
+
expect(selector.send(:select, candidates)).to eq([matching_primary])
|
110
112
|
end
|
111
113
|
end
|
112
114
|
|
@@ -114,7 +116,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
114
116
|
let(:candidates) { [matching_secondary] }
|
115
117
|
|
116
118
|
it 'returns array with matching secondary' do
|
117
|
-
expect(
|
119
|
+
expect(selector.send(:select, candidates)).to eq([matching_secondary])
|
118
120
|
end
|
119
121
|
end
|
120
122
|
|
@@ -122,7 +124,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
122
124
|
let(:candidates) { [secondary] }
|
123
125
|
|
124
126
|
it 'returns an empty array' do
|
125
|
-
expect(
|
127
|
+
expect(selector.send(:select, candidates)).to be_empty
|
126
128
|
end
|
127
129
|
end
|
128
130
|
end
|
@@ -133,7 +135,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
133
135
|
let(:candidates) { [primary, secondary, secondary] }
|
134
136
|
|
135
137
|
it 'returns an array with the primary' do
|
136
|
-
expect(
|
138
|
+
expect(selector.send(:select, candidates)).to eq([primary])
|
137
139
|
end
|
138
140
|
end
|
139
141
|
|
@@ -141,7 +143,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
141
143
|
let(:candidates) { [primary, matching_secondary] }
|
142
144
|
|
143
145
|
it 'returns an array of the matching secondary, then primary' do
|
144
|
-
expect(
|
146
|
+
expect(selector.send(:select, candidates)).to eq(
|
145
147
|
[matching_secondary, primary]
|
146
148
|
)
|
147
149
|
end
|
@@ -152,7 +154,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
152
154
|
let(:expected) { [matching_secondary, matching_secondary, primary] }
|
153
155
|
|
154
156
|
it 'returns an array of the matching secondaries, then primary' do
|
155
|
-
expect(
|
157
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
156
158
|
end
|
157
159
|
end
|
158
160
|
|
@@ -161,7 +163,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
161
163
|
let(:expected) {[matching_secondary, matching_primary] }
|
162
164
|
|
163
165
|
it 'returns an array of the matching secondary, then the primary' do
|
164
|
-
expect(
|
166
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
165
167
|
end
|
166
168
|
end
|
167
169
|
end
|
@@ -177,7 +179,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
177
179
|
let(:candidates) { [far_primary] }
|
178
180
|
|
179
181
|
it 'returns array with primary' do
|
180
|
-
expect(
|
182
|
+
expect(selector.send(:select, candidates)).to eq([far_primary])
|
181
183
|
end
|
182
184
|
end
|
183
185
|
|
@@ -185,7 +187,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
185
187
|
let(:candidates) { [far_secondary] }
|
186
188
|
|
187
189
|
it 'returns an array with the secondary' do
|
188
|
-
expect(
|
190
|
+
expect(selector.send(:select, candidates)).to eq([far_secondary])
|
189
191
|
end
|
190
192
|
end
|
191
193
|
end
|
@@ -196,7 +198,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
196
198
|
let(:candidates) { [primary, secondary] }
|
197
199
|
|
198
200
|
it 'returns an array with secondary, then primary' do
|
199
|
-
expect(
|
201
|
+
expect(selector.send(:select, candidates)).to eq([secondary, primary])
|
200
202
|
end
|
201
203
|
end
|
202
204
|
|
@@ -204,7 +206,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
204
206
|
let(:candidates) { [primary, far_secondary] }
|
205
207
|
|
206
208
|
it 'returns an array with the secondary, then primary' do
|
207
|
-
expect(
|
209
|
+
expect(selector.send(:select, candidates)).to eq([far_secondary, primary])
|
208
210
|
end
|
209
211
|
end
|
210
212
|
|
@@ -213,7 +215,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
213
215
|
let(:expected) { [secondary, far_primary] }
|
214
216
|
|
215
217
|
it 'returns an array with secondary, then primary' do
|
216
|
-
expect(
|
218
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
217
219
|
end
|
218
220
|
end
|
219
221
|
|
@@ -222,7 +224,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
222
224
|
let(:expected) { [far_secondary, far_primary] }
|
223
225
|
|
224
226
|
it 'returns an array with secondary, then primary' do
|
225
|
-
expect(
|
227
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
226
228
|
end
|
227
229
|
end
|
228
230
|
|
@@ -233,7 +235,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
233
235
|
let(:expected) { [secondary, primary] }
|
234
236
|
|
235
237
|
it 'returns an array with near secondary, then primary' do
|
236
|
-
expect(
|
238
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
237
239
|
end
|
238
240
|
end
|
239
241
|
|
@@ -242,7 +244,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
|
|
242
244
|
let(:expected) { [secondary, secondary, far_primary] }
|
243
245
|
|
244
246
|
it 'returns an array with secondaries, then primary' do
|
245
|
-
expect(
|
247
|
+
expect(selector.send(:select, candidates)).to eq(expected)
|
246
248
|
end
|
247
249
|
end
|
248
250
|
end
|
@@ -2,19 +2,21 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongo::ServerSelector::Secondary do
|
4
4
|
|
5
|
+
let(:name) { :secondary }
|
6
|
+
|
5
7
|
include_context 'server selector'
|
6
8
|
|
7
|
-
it_behaves_like 'a
|
8
|
-
let(:name) { :secondary }
|
9
|
+
it_behaves_like 'a server selector mode' do
|
9
10
|
let(:slave_ok) { true }
|
10
11
|
end
|
12
|
+
it_behaves_like 'a server selector with sensitive data in its options'
|
11
13
|
|
12
|
-
it_behaves_like 'a
|
14
|
+
it_behaves_like 'a server selector accepting tag sets'
|
13
15
|
|
14
16
|
describe '#to_mongos' do
|
15
17
|
|
16
18
|
it 'returns read preference formatted for mongos' do
|
17
|
-
expect(
|
19
|
+
expect(selector.to_mongos).to eq(
|
18
20
|
{ :mode => 'secondary' }
|
19
21
|
)
|
20
22
|
end
|
@@ -23,7 +25,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
23
25
|
let(:tag_sets) { [tag_set] }
|
24
26
|
|
25
27
|
it 'returns read preference formatted for mongos with tag sets' do
|
26
|
-
expect(
|
28
|
+
expect(selector.to_mongos).to eq(
|
27
29
|
{ :mode => 'secondary', :tags => tag_sets}
|
28
30
|
)
|
29
31
|
end
|
@@ -36,7 +38,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
36
38
|
let(:candidates) { [] }
|
37
39
|
|
38
40
|
it 'returns an empty array' do
|
39
|
-
expect(
|
41
|
+
expect(selector.send(:select, candidates)).to be_empty
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
@@ -44,7 +46,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
44
46
|
let(:candidates) { [primary] }
|
45
47
|
|
46
48
|
it 'returns an empty array' do
|
47
|
-
expect(
|
49
|
+
expect(selector.send(:select, candidates)).to be_empty
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
@@ -52,7 +54,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
52
54
|
let(:candidates) { [secondary] }
|
53
55
|
|
54
56
|
it 'returns array with secondary' do
|
55
|
-
expect(
|
57
|
+
expect(selector.send(:select, candidates)).to eq([secondary])
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -60,7 +62,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
60
62
|
let(:candidates) { [primary, secondary] }
|
61
63
|
|
62
64
|
it 'returns array with secondary' do
|
63
|
-
expect(
|
65
|
+
expect(selector.send(:select, candidates)).to eq([secondary])
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
@@ -68,7 +70,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
68
70
|
let(:candidates) { [secondary, secondary, primary] }
|
69
71
|
|
70
72
|
it 'returns array with all secondaries' do
|
71
|
-
expect(
|
73
|
+
expect(selector.send(:select, candidates)).to eq([secondary, secondary])
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
@@ -82,7 +84,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
82
84
|
let(:candidates) { [primary] }
|
83
85
|
|
84
86
|
it 'returns an empty array' do
|
85
|
-
expect(
|
87
|
+
expect(selector.send(:select, candidates)).to be_empty
|
86
88
|
end
|
87
89
|
end
|
88
90
|
|
@@ -90,7 +92,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
90
92
|
let(:candidates) { [secondary] }
|
91
93
|
|
92
94
|
it 'returns an empty array' do
|
93
|
-
expect(
|
95
|
+
expect(selector.send(:select, candidates)).to be_empty
|
94
96
|
end
|
95
97
|
end
|
96
98
|
|
@@ -98,7 +100,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
98
100
|
let(:candidates) { [matching_secondary] }
|
99
101
|
|
100
102
|
it 'returns an array with matching secondary' do
|
101
|
-
expect(
|
103
|
+
expect(selector.send(:select, candidates)).to eq([matching_secondary])
|
102
104
|
end
|
103
105
|
end
|
104
106
|
end
|
@@ -109,7 +111,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
109
111
|
let(:candidates) { [primary, secondary, secondary] }
|
110
112
|
|
111
113
|
it 'returns an emtpy array' do
|
112
|
-
expect(
|
114
|
+
expect(selector.send(:select, candidates)).to be_empty
|
113
115
|
end
|
114
116
|
end
|
115
117
|
|
@@ -117,7 +119,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
117
119
|
let(:candidates) { [secondary, matching_secondary]}
|
118
120
|
|
119
121
|
it 'returns array with matching secondary' do
|
120
|
-
expect(
|
122
|
+
expect(selector.send(:select, candidates)).to eq([matching_secondary])
|
121
123
|
end
|
122
124
|
end
|
123
125
|
|
@@ -125,7 +127,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
125
127
|
let(:candidates) { [matching_secondary, matching_secondary] }
|
126
128
|
|
127
129
|
it 'returns an array with both matching secondaries' do
|
128
|
-
expect(
|
130
|
+
expect(selector.send(:select, candidates)).to eq([matching_secondary, matching_secondary])
|
129
131
|
end
|
130
132
|
end
|
131
133
|
end
|
@@ -141,7 +143,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
141
143
|
let(:candidates) { [far_primary] }
|
142
144
|
|
143
145
|
it 'returns an empty array' do
|
144
|
-
expect(
|
146
|
+
expect(selector.send(:select, candidates)).to be_empty
|
145
147
|
end
|
146
148
|
end
|
147
149
|
|
@@ -149,7 +151,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
149
151
|
let(:candidates) { [far_secondary] }
|
150
152
|
|
151
153
|
it 'returns an array with the secondary' do
|
152
|
-
expect(
|
154
|
+
expect(selector.send(:select, candidates)).to eq([far_secondary])
|
153
155
|
end
|
154
156
|
end
|
155
157
|
end
|
@@ -160,7 +162,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
160
162
|
let(:candidates) { [primary, far_secondary] }
|
161
163
|
|
162
164
|
it 'returns an array with the secondary' do
|
163
|
-
expect(
|
165
|
+
expect(selector.send(:select, candidates)).to eq([far_secondary])
|
164
166
|
end
|
165
167
|
end
|
166
168
|
|
@@ -168,7 +170,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
168
170
|
let(:candidates) { [far_primary, far_secondary] }
|
169
171
|
|
170
172
|
it 'returns an array with the secondary' do
|
171
|
-
expect(
|
173
|
+
expect(selector.send(:select, candidates)).to eq([far_secondary])
|
172
174
|
end
|
173
175
|
end
|
174
176
|
|
@@ -178,7 +180,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
178
180
|
let(:candidates) { [primary, secondary, far_secondary] }
|
179
181
|
|
180
182
|
it 'returns an array with near secondary' do
|
181
|
-
expect(
|
183
|
+
expect(selector.send(:select, candidates)).to eq([secondary])
|
182
184
|
end
|
183
185
|
end
|
184
186
|
|
@@ -186,7 +188,7 @@ describe Mongo::ServerSelector::Secondary do
|
|
186
188
|
let(:candidates) { [far_primary, secondary, secondary] }
|
187
189
|
|
188
190
|
it 'returns an array with two secondaries' do
|
189
|
-
expect(
|
191
|
+
expect(selector.send(:select, candidates)).to eq([secondary, secondary])
|
190
192
|
end
|
191
193
|
end
|
192
194
|
end
|
@@ -6,66 +6,125 @@ describe Mongo::ServerSelector do
|
|
6
6
|
|
7
7
|
describe '.get' do
|
8
8
|
|
9
|
-
let(:
|
10
|
-
described_class.get(
|
9
|
+
let(:selector) do
|
10
|
+
described_class.get(:mode => name, :tag_sets => tag_sets)
|
11
11
|
end
|
12
12
|
|
13
|
-
let(:name) { :secondary }
|
14
|
-
let(:tag_sets) { [{ 'test' => 'tag' }] }
|
15
|
-
|
16
13
|
context 'when the mode is primary' do
|
17
|
-
|
14
|
+
|
15
|
+
let(:name) do
|
16
|
+
:primary
|
17
|
+
end
|
18
18
|
|
19
19
|
it 'returns a read preference of class Primary' do
|
20
|
-
expect(
|
20
|
+
expect(selector).to be_a(Mongo::ServerSelector::Primary)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'when the mode is primary_preferred' do
|
25
|
-
let(:name)
|
25
|
+
let(:name) do
|
26
|
+
:primary_preferred
|
27
|
+
end
|
26
28
|
|
27
29
|
it 'returns a read preference of class PrimaryPreferred' do
|
28
|
-
expect(
|
30
|
+
expect(selector).to be_a(Mongo::ServerSelector::PrimaryPreferred)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
32
34
|
context 'when the mode is secondary' do
|
33
|
-
let(:name)
|
35
|
+
let(:name) do
|
36
|
+
:secondary
|
37
|
+
end
|
34
38
|
|
35
39
|
it 'returns a read preference of class Secondary' do
|
36
|
-
expect(
|
40
|
+
expect(selector).to be_a(Mongo::ServerSelector::Secondary)
|
37
41
|
end
|
38
42
|
end
|
39
43
|
|
40
44
|
context 'when the mode is secondary_preferred' do
|
41
|
-
let(:name)
|
45
|
+
let(:name) do
|
46
|
+
:secondary_preferred
|
47
|
+
end
|
42
48
|
|
43
49
|
it 'returns a read preference of class SecondaryPreferred' do
|
44
|
-
expect(
|
50
|
+
expect(selector).to be_a(Mongo::ServerSelector::SecondaryPreferred)
|
45
51
|
end
|
46
52
|
end
|
47
53
|
|
48
54
|
context 'when the mode is nearest' do
|
49
|
-
let(:name)
|
55
|
+
let(:name) do
|
56
|
+
:nearest
|
57
|
+
end
|
50
58
|
|
51
59
|
it 'returns a read preference of class Nearest' do
|
52
|
-
expect(
|
60
|
+
expect(selector).to be_a(Mongo::ServerSelector::Nearest)
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
56
64
|
context 'when a mode is not provided' do
|
57
|
-
let(:
|
65
|
+
let(:selector) { described_class.get }
|
58
66
|
|
59
67
|
it 'returns a read preference of class Primary' do
|
60
|
-
expect(
|
68
|
+
expect(selector).to be_a(Mongo::ServerSelector::Primary)
|
61
69
|
end
|
62
70
|
end
|
63
71
|
|
64
|
-
context 'when tag sets provided' do
|
65
|
-
|
72
|
+
context 'when tag sets are provided' do
|
73
|
+
|
74
|
+
let(:selector) do
|
75
|
+
described_class.get(:mode => :secondary, :tag_sets => tag_sets)
|
76
|
+
end
|
77
|
+
|
78
|
+
let(:tag_sets) do
|
79
|
+
[{ 'test' => 'tag' }]
|
80
|
+
end
|
66
81
|
|
67
82
|
it 'sets tag sets on the read preference object' do
|
68
|
-
expect(
|
83
|
+
expect(selector.tag_sets).to eq(tag_sets)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'when server_selection_timeout is specified' do
|
88
|
+
|
89
|
+
let(:selector) do
|
90
|
+
described_class.get(:mode => :secondary, :server_selection_timeout => 1)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'sets server selection timeout on the read preference object' do
|
94
|
+
expect(selector.server_selection_timeout).to eq(1)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'when server_selection_timeout is not specified' do
|
99
|
+
|
100
|
+
let(:selector) do
|
101
|
+
described_class.get(:mode => :secondary)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'sets server selection timeout to the default' do
|
105
|
+
expect(selector.server_selection_timeout).to eq(Mongo::ServerSelector::SERVER_SELECTION_TIMEOUT)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'when local_threshold is specified' do
|
110
|
+
|
111
|
+
let(:selector) do
|
112
|
+
described_class.get(:mode => :secondary, :local_threshold => 0.010)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'sets local_threshold on the read preference object' do
|
116
|
+
expect(selector.local_threshold).to eq(0.010)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when local_threshold is not specified' do
|
121
|
+
|
122
|
+
let(:selector) do
|
123
|
+
described_class.get(:mode => :secondary)
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'sets local threshold to the default' do
|
127
|
+
expect(selector.local_threshold).to eq(Mongo::ServerSelector::LOCAL_THRESHOLD)
|
69
128
|
end
|
70
129
|
end
|
71
130
|
end
|
@@ -74,7 +133,9 @@ describe Mongo::ServerSelector do
|
|
74
133
|
|
75
134
|
context 'when #select returns a list of nils' do
|
76
135
|
|
77
|
-
let(:servers)
|
136
|
+
let(:servers) do
|
137
|
+
[ server(:primary) ]
|
138
|
+
end
|
78
139
|
|
79
140
|
let(:cluster) do
|
80
141
|
double('cluster').tap do |c|
|
@@ -86,7 +147,7 @@ describe Mongo::ServerSelector do
|
|
86
147
|
end
|
87
148
|
|
88
149
|
let(:read_pref) do
|
89
|
-
described_class.get(
|
150
|
+
described_class.get(mode: :primary, server_selection_timeout: 0.1).tap do |pref|
|
90
151
|
allow(pref).to receive(:select).and_return([ nil, nil ])
|
91
152
|
end
|
92
153
|
end
|
@@ -103,7 +164,9 @@ describe Mongo::ServerSelector do
|
|
103
164
|
|
104
165
|
context 'when cluster#servers is empty' do
|
105
166
|
|
106
|
-
let(:servers)
|
167
|
+
let(:servers) do
|
168
|
+
[]
|
169
|
+
end
|
107
170
|
|
108
171
|
let(:cluster) do
|
109
172
|
double('cluster').tap do |c|
|
@@ -115,7 +178,7 @@ describe Mongo::ServerSelector do
|
|
115
178
|
end
|
116
179
|
|
117
180
|
let(:read_pref) do
|
118
|
-
described_class.get(
|
181
|
+
described_class.get(mode: :primary, server_selection_timeout: 0.1)
|
119
182
|
end
|
120
183
|
|
121
184
|
it 'raises a NoServerAvailable error' do
|