mongo 2.7.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +39 -14
- data/Rakefile +1 -0
- data/lib/mongo/auth.rb +4 -1
- data/lib/mongo/client.rb +4 -3
- data/lib/mongo/cluster.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +5 -2
- data/lib/mongo/database.rb +1 -0
- data/lib/mongo/error/invalid_server_preference.rb +1 -0
- data/lib/mongo/error/operation_failure.rb +10 -0
- data/lib/mongo/error/parser.rb +10 -0
- data/lib/mongo/event.rb +1 -2
- data/lib/mongo/operation/result.rb +4 -1
- data/lib/mongo/operation/shared/executable_transaction_label.rb +3 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/protocol/msg.rb +1 -1
- data/lib/mongo/protocol/query.rb +2 -2
- data/lib/mongo/retryable.rb +20 -6
- data/lib/mongo/server.rb +6 -0
- data/lib/mongo/server/connection.rb +4 -4
- data/lib/mongo/server/monitor/connection.rb +9 -5
- data/lib/mongo/server_selector/selectable.rb +86 -32
- data/lib/mongo/session.rb +98 -15
- data/lib/mongo/version.rb +1 -1
- data/spec/README.md +85 -0
- data/spec/integration/bulk_insert_spec.rb +1 -1
- data/spec/integration/change_stream_examples_spec.rb +3 -1
- data/spec/integration/change_stream_spec.rb +10 -14
- data/spec/integration/client_construction_spec.rb +1 -0
- data/spec/integration/command_monitoring_spec.rb +37 -1
- data/spec/integration/command_spec.rb +141 -0
- data/spec/integration/connection_spec.rb +4 -2
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/retryable_writes_spec.rb +33 -42
- data/spec/integration/server_description_spec.rb +3 -3
- data/spec/integration/server_selector_spec.rb +79 -0
- data/spec/lite_spec_helper.rb +4 -2
- data/spec/mongo/address_spec.rb +8 -0
- data/spec/mongo/auth/cr_spec.rb +5 -2
- data/spec/mongo/auth/invalid_mechanism_spec.rb +11 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +3 -2
- data/spec/mongo/auth/scram/negotiation_spec.rb +1 -2
- data/spec/mongo/auth/scram_spec.rb +11 -6
- data/spec/mongo/auth/user/view_spec.rb +13 -6
- data/spec/mongo/bulk_write_spec.rb +81 -104
- data/spec/mongo/client_construction_spec.rb +18 -7
- data/spec/mongo/client_spec.rb +11 -7
- data/spec/mongo/cluster_spec.rb +30 -1
- data/spec/mongo/collection/view/aggregation_spec.rb +18 -10
- data/spec/mongo/collection/view/change_stream_spec.rb +28 -8
- data/spec/mongo/collection/view/map_reduce_spec.rb +24 -10
- data/spec/mongo/collection/view/readable_spec.rb +37 -19
- data/spec/mongo/collection/view/writable_spec.rb +64 -32
- data/spec/mongo/collection/view_spec.rb +4 -2
- data/spec/mongo/collection_spec.rb +163 -73
- data/spec/mongo/cursor_spec.rb +5 -2
- data/spec/mongo/database_spec.rb +41 -19
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +29 -0
- data/spec/mongo/grid/stream/write_spec.rb +2 -1
- data/spec/mongo/index/view_spec.rb +42 -24
- data/spec/mongo/operation/delete/op_msg_spec.rb +11 -7
- data/spec/mongo/operation/insert/op_msg_spec.rb +10 -6
- data/spec/mongo/operation/update/op_msg_spec.rb +10 -6
- data/spec/mongo/protocol/compressed_spec.rb +1 -1
- data/spec/mongo/protocol/msg_spec.rb +1 -1
- data/spec/mongo/server/app_metadata_spec.rb +2 -1
- data/spec/mongo/server/connection_auth_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +42 -0
- data/spec/mongo/server_selector_spec.rb +17 -0
- data/spec/mongo/server_spec.rb +110 -0
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/session_spec.rb +1 -1
- data/spec/mongo/session_transaction_spec.rb +162 -1
- data/spec/mongo/socket/ssl_spec.rb +14 -7
- data/spec/mongo/uri/srv_protocol_spec.rb +41 -34
- data/spec/spec_helper.rb +3 -191
- data/spec/spec_tests/change_streams_spec.rb +3 -6
- data/spec/spec_tests/data/transactions/abort.yml +3 -1
- data/spec/spec_tests/data/transactions/commit.yml +4 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +17 -13
- data/spec/spec_tests/data/transactions/read-concern.yml +611 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +126 -21
- data/spec/spec_tests/data/transactions_api/callback-aborts.yml +42 -39
- data/spec/spec_tests/data/transactions_api/callback-commits.yml +52 -50
- data/spec/spec_tests/data/transactions_api/callback-retry.yml +33 -31
- data/spec/spec_tests/data/transactions_api/commit-retry.yml +42 -39
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +13 -12
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +15 -26
- data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +25 -33
- data/spec/spec_tests/data/transactions_api/commit.yml +44 -42
- data/spec/spec_tests/data/transactions_api/transaction-options.yml +25 -23
- data/spec/spec_tests/max_staleness_spec.rb +2 -0
- data/spec/spec_tests/retryable_writes_spec.rb +2 -6
- data/spec/spec_tests/sdam_spec.rb +2 -0
- data/spec/spec_tests/server_selection_spec.rb +3 -0
- data/spec/spec_tests/transactions_api_spec.rb +7 -1
- data/spec/spec_tests/transactions_spec.rb +6 -0
- data/spec/spec_tests/uri_options_spec.rb +4 -26
- data/spec/support/certificates/ca.pem +21 -16
- data/spec/support/certificates/client.pem +90 -90
- data/spec/support/certificates/client_cert.pem +21 -20
- data/spec/support/certificates/client_key.pem +27 -28
- data/spec/support/certificates/client_key_encrypted.pem +26 -26
- data/spec/support/certificates/crl.pem +10 -8
- data/spec/support/certificates/crl_client_revoked.pem +11 -10
- data/spec/support/certificates/server.pem +48 -33
- data/spec/support/change_streams.rb +12 -32
- data/spec/support/client_registry.rb +12 -1
- data/spec/support/cluster_config.rb +48 -2
- data/spec/support/common_shortcuts.rb +73 -7
- data/spec/support/connection_string.rb +0 -3
- data/spec/support/constraints.rb +87 -22
- data/spec/support/crud.rb +2 -1
- data/spec/support/shared/server_selector.rb +0 -28
- data/spec/support/shared/session.rb +25 -14
- data/spec/support/transactions.rb +4 -8
- data/spec/support/transactions/operation.rb +26 -4
- data/spec/support/transactions/verifier.rb +5 -2
- metadata +496 -488
- metadata.gz.sig +5 -2
- data/spec/support/certificates/password_protected.pem +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f14ee6d7ece598841ae7a4a02261946837f515d4ce4106846ba33bda33756901
|
4
|
+
data.tar.gz: a574886854063a619a26581b45a963e57fb3e2f55c322cbf65329aa19559e7c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c4898202c6b0982b353c1f569945cda95d726488bd632c3eb5270bc54a6f1f2f8608f2b6a0c4bec548192bed998e34a2c1381b8fe6095a0710113f47e2c9f7a
|
7
|
+
data.tar.gz: afff4ce90e7501db6eb63e111efb9814bfeec03aa171a6daf2dc2c4d3a9b621b0ea5161bf55ff8e3fc45548e86345baff35ee8f3038beb0ae53e5d19e6a6e207
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -2,24 +2,27 @@ MongoDB Ruby Driver [![Build Status][travis-img]][travis-url] [![Code Climate][c
|
|
2
2
|
-----
|
3
3
|
The officially supported Ruby driver for [MongoDB](http://www.mongodb.org).
|
4
4
|
|
5
|
+
|
5
6
|
Documentation
|
6
|
-
|
7
|
+
-------------
|
7
8
|
|
8
9
|
High level documentation and usage examples are located
|
9
10
|
[here](http://docs.mongodb.org/ecosystem/drivers/ruby/).
|
10
11
|
|
11
12
|
API docs can be found [here](http://api.mongodb.org/ruby/).
|
12
13
|
|
14
|
+
|
13
15
|
Support & Feedback
|
14
|
-
|
16
|
+
------------------
|
15
17
|
|
16
18
|
For issues, questions or feedback related to the Ruby driver, please look into
|
17
19
|
our [support channels](http://www.mongodb.org/about/support). Please
|
18
20
|
do not email any of the Ruby developers directly with issues or
|
19
21
|
questions - you're more likely to get an answer quickly on the [mongodb-user list](http://groups.google.com/group/mongodb-user) on Google Groups.
|
20
22
|
|
23
|
+
|
21
24
|
Bugs & Feature Requests
|
22
|
-
|
25
|
+
-----------------------
|
23
26
|
|
24
27
|
Do you have a bug to report or a feature request to make?
|
25
28
|
|
@@ -41,30 +44,52 @@ When reporting an issue, please keep in mind that all information in JIRA for al
|
|
41
44
|
* Provide any sensitive data or server logs.
|
42
45
|
* Report potential security issues publicly (see 'Security Issues').
|
43
46
|
|
47
|
+
|
48
|
+
Security Issues
|
49
|
+
---------------
|
50
|
+
|
51
|
+
If you’ve identified a potential security related issue in a driver or any other
|
52
|
+
MongoDB project, please report it by following the [instructions here](http://docs.mongodb.org/manual/tutorial/create-a-vulnerability-report).
|
53
|
+
|
54
|
+
|
44
55
|
Running Tests
|
45
|
-
|
56
|
+
-------------
|
46
57
|
|
47
|
-
The driver uses RSpec as
|
58
|
+
The driver uses RSpec as its primary testing tool. Most tests require a
|
59
|
+
running MongoDB server. To test the driver against a single-node (standalone)
|
60
|
+
deployment, first launch a server:
|
48
61
|
|
49
|
-
|
62
|
+
mkdir /tmp/mrb
|
63
|
+
mongod --dbpath /tmp/mrb --bind_ip 127.0.0.1 --setParameter enableTestCommands=1
|
50
64
|
|
51
|
-
|
65
|
+
... then run the tests:
|
52
66
|
|
53
|
-
|
67
|
+
bundle exec rake
|
54
68
|
|
55
|
-
|
56
|
-
|
69
|
+
It is possible to run tests in a specific file, as well as use other
|
70
|
+
test invocations supported by RSpec:
|
71
|
+
|
72
|
+
bundle exec rspec path/to/spec.rb:42
|
73
|
+
|
74
|
+
Note that certain user accounts have to be created for individual tests to
|
75
|
+
succeed, and they are not created when the individual tests are run. The
|
76
|
+
user accounts are created if you run `rake` as mentioned above, and you can
|
77
|
+
also create them by running:
|
78
|
+
|
79
|
+
bundle exec rake spec:prepare
|
80
|
+
|
81
|
+
For further information about supported cluster configurations and how to
|
82
|
+
configure the test suite, please see the README in the spec directory.
|
57
83
|
|
58
|
-
If you’ve identified a potential security related issue in a driver or any other
|
59
|
-
MongoDB project, please report it by following the [instructions here](http://docs.mongodb.org/manual/tutorial/create-a-vulnerability-report).
|
60
84
|
|
61
85
|
Release History
|
62
|
-
|
86
|
+
---------------
|
63
87
|
|
64
88
|
Full release notes and release history are available [here](https://github.com/mongodb/mongo-ruby-driver/releases).
|
65
89
|
|
90
|
+
|
66
91
|
License
|
67
|
-
|
92
|
+
-------
|
68
93
|
|
69
94
|
Copyright (C) 2009-2019 MongoDB, Inc.
|
70
95
|
|
data/Rakefile
CHANGED
data/lib/mongo/auth.rb
CHANGED
@@ -84,7 +84,10 @@ module Mongo
|
|
84
84
|
#
|
85
85
|
# @since 2.0.0
|
86
86
|
def initialize(mechanism)
|
87
|
-
|
87
|
+
known_mechanisms = SOURCES.keys.sort.map do |key|
|
88
|
+
key.inspect
|
89
|
+
end.join(', ')
|
90
|
+
super("#{mechanism.inspect} is invalid, please use one of the following mechanisms: #{known_mechanisms}")
|
88
91
|
end
|
89
92
|
end
|
90
93
|
|
data/lib/mongo/client.rb
CHANGED
@@ -589,10 +589,11 @@ module Mongo
|
|
589
589
|
# @example Start a session.
|
590
590
|
# client.start_session(causal_consistency: true)
|
591
591
|
#
|
592
|
-
# @param [ Hash ] options The session options.
|
592
|
+
# @param [ Hash ] options The session options. Accepts the options
|
593
|
+
# that Session#initialize accepts.
|
593
594
|
#
|
594
|
-
# @note A Session cannot be used by multiple threads at once; session
|
595
|
-
# thread-safe.
|
595
|
+
# @note A Session cannot be used by multiple threads at once; session
|
596
|
+
# objects are not thread-safe.
|
596
597
|
#
|
597
598
|
# @return [ Session ] The session.
|
598
599
|
#
|
data/lib/mongo/cluster.rb
CHANGED
@@ -122,6 +122,7 @@ module Mongo
|
|
122
122
|
# command to run.
|
123
123
|
# @option opts [ Hash ] :read The read preference options.
|
124
124
|
# @option opts [ Hash ] :collation The collation to use.
|
125
|
+
# @option opts [ Mongo::Session ] :session The session to use for the operation.
|
125
126
|
#
|
126
127
|
# @return [ Integer ] The document count.
|
127
128
|
#
|
@@ -182,8 +183,10 @@ module Mongo
|
|
182
183
|
pipeline << { :'$limit' => opts[:limit] } if opts[:limit]
|
183
184
|
pipeline << { :'$group' => { _id: nil, n: { :'$sum' => 1 } } }
|
184
185
|
|
185
|
-
opts.select! { |k, _| [:hint, :max_time_ms, :read, :collation].include?(k) }
|
186
|
-
aggregate(pipeline, opts).first
|
186
|
+
opts.select! { |k, _| [:hint, :max_time_ms, :read, :collation, :session].include?(k) }
|
187
|
+
first = aggregate(pipeline, opts).first
|
188
|
+
return 0 unless first
|
189
|
+
first['n'].to_i
|
187
190
|
end
|
188
191
|
|
189
192
|
# Gets an estimate of the count of documents in a collection using collection metadata.
|
data/lib/mongo/database.rb
CHANGED
@@ -150,6 +150,7 @@ module Mongo
|
|
150
150
|
# @param [ Hash ] opts The command options.
|
151
151
|
#
|
152
152
|
# @option opts :read [ Hash ] The read preference for this command.
|
153
|
+
# @option opts :session [ Session ] The session to use for this command.
|
153
154
|
#
|
154
155
|
# @return [ Hash ] The result of the command execution.
|
155
156
|
def command(operation, opts = {})
|
@@ -33,6 +33,7 @@ module Mongo
|
|
33
33
|
# Error message for when the max staleness is not at least twice the heartbeat frequency.
|
34
34
|
#
|
35
35
|
# @since 2.4.0
|
36
|
+
# @deprecated
|
36
37
|
INVALID_MAX_STALENESS = "`max_staleness` value is too small. It must be at least " +
|
37
38
|
"`ServerSelector::SMALLEST_MAX_STALENESS_SECONDS` and (the cluster's heartbeat_frequency " +
|
38
39
|
"setting + `Cluster::IDLE_WRITE_PERIOD_SECONDS`).".freeze
|
@@ -182,8 +182,18 @@ module Mongo
|
|
182
182
|
@code = options[:code]
|
183
183
|
@code_name = options[:code_name]
|
184
184
|
@labels = options[:labels]
|
185
|
+
@wtimeout = !!options[:wtimeout]
|
185
186
|
super(message)
|
186
187
|
end
|
188
|
+
|
189
|
+
# Whether the error was a write concern timeout.
|
190
|
+
#
|
191
|
+
# @return [ true | false ] Whether the error was a write concern timeout.
|
192
|
+
#
|
193
|
+
# @since 2.7.1
|
194
|
+
def wtimeout?
|
195
|
+
@wtimeout
|
196
|
+
end
|
187
197
|
end
|
188
198
|
end
|
189
199
|
end
|
data/lib/mongo/error/parser.rb
CHANGED
@@ -66,6 +66,9 @@ module Mongo
|
|
66
66
|
# @since 2.7.0
|
67
67
|
attr_reader :labels
|
68
68
|
|
69
|
+
# @api private
|
70
|
+
attr_reader :wtimeout
|
71
|
+
|
69
72
|
# Create the new parser with the returned document.
|
70
73
|
#
|
71
74
|
# @example Create the new parser.
|
@@ -93,6 +96,7 @@ module Mongo
|
|
93
96
|
parse_flag(@message)
|
94
97
|
parse_code
|
95
98
|
parse_labels
|
99
|
+
parse_wtimeout
|
96
100
|
end
|
97
101
|
|
98
102
|
def parse_single(message, key, doc = document)
|
@@ -156,6 +160,12 @@ module Mongo
|
|
156
160
|
def parse_labels
|
157
161
|
@labels = document['errorLabels'] || []
|
158
162
|
end
|
163
|
+
|
164
|
+
def parse_wtimeout
|
165
|
+
@wtimeout = document[WRITE_CONCERN_ERROR] &&
|
166
|
+
document[WRITE_CONCERN_ERROR]['errInfo'] &&
|
167
|
+
document[WRITE_CONCERN_ERROR]['errInfo']['wtimeout']
|
168
|
+
end
|
159
169
|
end
|
160
170
|
end
|
161
171
|
end
|
data/lib/mongo/event.rb
CHANGED
@@ -24,8 +24,7 @@ module Mongo
|
|
24
24
|
# When a server is elected primary.
|
25
25
|
#
|
26
26
|
# @since 2.0.0
|
27
|
-
#
|
28
|
-
# @deprecated. Will be removed in 3.0
|
27
|
+
# @deprecated Will be removed in 3.0
|
29
28
|
PRIMARY_ELECTED = 'primary_elected'.freeze
|
30
29
|
|
31
30
|
# When a server is discovered to be a member of a topology.
|
@@ -267,7 +267,10 @@ module Mongo
|
|
267
267
|
raise Error::OperationFailure.new(
|
268
268
|
parser.message,
|
269
269
|
self,
|
270
|
-
:
|
270
|
+
code: parser.code,
|
271
|
+
code_name: parser.code_name,
|
272
|
+
labels: parser.labels,
|
273
|
+
wtimeout: parser.wtimeout)
|
271
274
|
end
|
272
275
|
private :raise_operation_failure
|
273
276
|
|
@@ -26,7 +26,9 @@ module Mongo
|
|
26
26
|
def execute(server)
|
27
27
|
super
|
28
28
|
rescue Mongo::Error::SocketError => e
|
29
|
-
|
29
|
+
if session && session.in_transaction?
|
30
|
+
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL)
|
31
|
+
end
|
30
32
|
raise e
|
31
33
|
end
|
32
34
|
end
|
data/lib/mongo/protocol/msg.rb
CHANGED
data/lib/mongo/protocol/query.rb
CHANGED
@@ -269,11 +269,11 @@ module Mongo
|
|
269
269
|
# @example Get the command name.
|
270
270
|
# upconverter.command_name
|
271
271
|
#
|
272
|
-
# @return [ String
|
272
|
+
# @return [ String ] The command name.
|
273
273
|
#
|
274
274
|
# @since 2.1.0
|
275
275
|
def command_name
|
276
|
-
(filter[:$query] || !command?) ? FIND : filter.keys.first
|
276
|
+
((filter[:$query] || !command?) ? FIND : filter.keys.first).to_s
|
277
277
|
end
|
278
278
|
|
279
279
|
private
|
data/lib/mongo/retryable.rb
CHANGED
@@ -69,14 +69,19 @@ module Mongo
|
|
69
69
|
#
|
70
70
|
# @note This only retries read operations on socket errors.
|
71
71
|
#
|
72
|
+
# @param [ Hash ] options Options.
|
72
73
|
# @param [ Proc ] block The block to execute.
|
73
74
|
#
|
75
|
+
# @option options [ String ] :retry_message Message to log when retrying.
|
76
|
+
#
|
74
77
|
# @return [ Result ] The result of the operation.
|
75
78
|
#
|
76
79
|
# @since 2.2.6
|
77
|
-
def read_with_one_retry
|
80
|
+
def read_with_one_retry(options = nil)
|
78
81
|
yield
|
79
|
-
rescue Error::SocketError, Error::SocketTimeoutError
|
82
|
+
rescue Error::SocketError, Error::SocketTimeoutError => e
|
83
|
+
retry_message = options && options[:retry_message]
|
84
|
+
log_retry(e, message: retry_message)
|
80
85
|
yield
|
81
86
|
end
|
82
87
|
|
@@ -102,6 +107,7 @@ module Mongo
|
|
102
107
|
# @note This only retries operations on not master failures, since it is
|
103
108
|
# the only case we can be sure a partial write did not already occur.
|
104
109
|
#
|
110
|
+
# @param [ nil | Session ] session Optional session to use with the operation.
|
105
111
|
# @param [ nil | Hash | WriteConcern::Base ] write_concern The write concern.
|
106
112
|
# @param [ true | false ] ending_transaction True if the write operation is abortTransaction or
|
107
113
|
# commitTransaction, false otherwise.
|
@@ -122,6 +128,9 @@ module Mongo
|
|
122
128
|
return legacy_write_with_retry(nil, session, &block)
|
123
129
|
end
|
124
130
|
|
131
|
+
# If we are here, session is not nil. A session being nil would have
|
132
|
+
# failed retry_write_allowed? check.
|
133
|
+
|
125
134
|
server = cluster.next_primary
|
126
135
|
|
127
136
|
unless ending_transaction || server.retry_writes?
|
@@ -130,7 +139,7 @@ module Mongo
|
|
130
139
|
|
131
140
|
begin
|
132
141
|
txn_num = session.in_transaction? ? session.txn_num : session.next_txn_num
|
133
|
-
yield(server, txn_num)
|
142
|
+
yield(server, txn_num, false)
|
134
143
|
rescue Error::SocketError, Error::SocketTimeoutError => e
|
135
144
|
raise e if session.in_transaction? && !ending_transaction
|
136
145
|
retry_write(e, txn_num, &block)
|
@@ -162,7 +171,7 @@ module Mongo
|
|
162
171
|
server = cluster.next_primary
|
163
172
|
raise original_error unless (server.retry_writes? && txn_num)
|
164
173
|
log_retry(original_error)
|
165
|
-
yield(server, txn_num)
|
174
|
+
yield(server, txn_num, true)
|
166
175
|
rescue Error::SocketError, Error::SocketTimeoutError => e
|
167
176
|
cluster.scan!(false)
|
168
177
|
raise e
|
@@ -196,8 +205,13 @@ module Mongo
|
|
196
205
|
end
|
197
206
|
|
198
207
|
# Log a warning so that any application slow down is immediately obvious.
|
199
|
-
def log_retry(e)
|
200
|
-
|
208
|
+
def log_retry(e, options = nil)
|
209
|
+
message = if options && options[:message]
|
210
|
+
options[:message]
|
211
|
+
else
|
212
|
+
"Retry"
|
213
|
+
end
|
214
|
+
Logger.logger.warn "#{message} due to: #{e.class.name} #{e.message}"
|
201
215
|
end
|
202
216
|
end
|
203
217
|
end
|
data/lib/mongo/server.rb
CHANGED
@@ -253,6 +253,12 @@ module Mongo
|
|
253
253
|
'GHOST'
|
254
254
|
when other?
|
255
255
|
'OTHER'
|
256
|
+
when unknown?
|
257
|
+
'UNKNOWN'
|
258
|
+
else
|
259
|
+
# Since the summary method is often used for debugging, do not raise
|
260
|
+
# an exception in case none of the expected types matched
|
261
|
+
''
|
256
262
|
end
|
257
263
|
if replica_set_name
|
258
264
|
status += " replica_set=#{replica_set_name}"
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# Copyright (C) 2014-2019 MongoDB, Inc.
|
2
|
-
|
2
|
+
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
5
5
|
# You may obtain a copy of the License at
|
6
|
-
|
7
|
-
#
|
8
|
-
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
9
|
# Unless required by applicable law or agreed to in writing, software
|
10
10
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# Copyright (C) 2015-2019 MongoDB, Inc.
|
2
|
-
|
2
|
+
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
5
5
|
# You may obtain a copy of the License at
|
6
|
-
|
7
|
-
#
|
8
|
-
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
9
|
# Unless required by applicable law or agreed to in writing, software
|
10
10
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -128,7 +128,7 @@ module Mongo
|
|
128
128
|
# @since 2.2.0
|
129
129
|
def ismaster
|
130
130
|
ensure_connected do |socket|
|
131
|
-
read_with_one_retry do
|
131
|
+
read_with_one_retry(retry_message: retry_message) do
|
132
132
|
socket.write(ISMASTER_BYTES)
|
133
133
|
Protocol::Message.deserialize(socket).documents[0]
|
134
134
|
end
|
@@ -212,6 +212,10 @@ module Mongo
|
|
212
212
|
reply
|
213
213
|
end
|
214
214
|
end
|
215
|
+
|
216
|
+
def retry_message
|
217
|
+
"Retrying ismaster on #{address}"
|
218
|
+
end
|
215
219
|
end
|
216
220
|
end
|
217
221
|
end
|