mongo 2.0.6 → 2.1.0.beta
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/lib/mongo.rb +2 -0
- data/lib/mongo/bulk_write.rb +1 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +87 -31
- data/lib/mongo/bulk_write/deletable.rb +8 -7
- data/lib/mongo/bulk_write/insertable.rb +4 -3
- data/lib/mongo/bulk_write/ordered_bulk_write.rb +6 -6
- data/lib/mongo/bulk_write/replacable.rb +4 -3
- data/lib/mongo/bulk_write/result.rb +138 -0
- data/lib/mongo/bulk_write/unordered_bulk_write.rb +5 -8
- data/lib/mongo/bulk_write/updatable.rb +8 -7
- data/lib/mongo/client.rb +36 -4
- data/lib/mongo/cluster.rb +39 -4
- data/lib/mongo/cluster/topology/replica_set.rb +20 -4
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/collection.rb +282 -29
- data/lib/mongo/collection/view/aggregation.rb +32 -4
- data/lib/mongo/collection/view/iterable.rb +2 -1
- data/lib/mongo/collection/view/map_reduce.rb +3 -1
- data/lib/mongo/collection/view/readable.rb +89 -14
- data/lib/mongo/collection/view/writable.rb +11 -5
- data/lib/mongo/cursor.rb +11 -3
- data/lib/mongo/dbref.rb +113 -0
- data/lib/mongo/error.rb +6 -2
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/event/description_changed.rb +1 -1
- data/lib/mongo/grid/file.rb +1 -1
- data/lib/mongo/grid/fs.rb +2 -5
- data/lib/mongo/monitoring.rb +199 -0
- data/lib/mongo/monitoring/command_log_subscriber.rb +88 -0
- data/lib/mongo/monitoring/event.rb +17 -0
- data/lib/mongo/monitoring/event/command_failed.rb +96 -0
- data/lib/mongo/monitoring/event/command_started.rb +88 -0
- data/lib/mongo/monitoring/event/command_succeeded.rb +96 -0
- data/lib/mongo/monitoring/publishable.rb +96 -0
- data/lib/mongo/operation.rb +1 -0
- data/lib/mongo/operation/executable.rb +1 -1
- data/lib/mongo/operation/parallel_scan.rb +76 -0
- data/lib/mongo/operation/parallel_scan/result.rb +72 -0
- data/lib/mongo/operation/specifiable.rb +18 -0
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +1 -1
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +1 -1
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +2 -2
- data/lib/mongo/operation/write/bulk/bulk_update.rb +1 -1
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +13 -1
- data/lib/mongo/protocol/delete.rb +8 -13
- data/lib/mongo/protocol/get_more.rb +13 -13
- data/lib/mongo/protocol/insert.rb +8 -13
- data/lib/mongo/protocol/kill_cursors.rb +7 -11
- data/lib/mongo/protocol/query.rb +58 -20
- data/lib/mongo/protocol/reply.rb +12 -0
- data/lib/mongo/protocol/update.rb +13 -14
- data/lib/mongo/server.rb +23 -2
- data/lib/mongo/server/connectable.rb +0 -22
- data/lib/mongo/server/connection.rb +29 -0
- data/lib/mongo/server/description.rb +23 -1
- data/lib/mongo/server/monitor.rb +17 -1
- data/lib/mongo/server/monitor/connection.rb +24 -0
- data/lib/mongo/socket/ssl.rb +28 -16
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/socket/unix.rb +1 -1
- data/lib/mongo/uri.rb +12 -5
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/auth/cr_spec.rb +9 -1
- data/spec/mongo/auth/ldap_spec.rb +9 -1
- data/spec/mongo/auth/scram_spec.rb +9 -1
- data/spec/mongo/auth/x509_spec.rb +9 -1
- data/spec/mongo/{bulk/bulk_write_spec.rb → bulk_write_spec.rb} +15 -15
- data/spec/mongo/client_spec.rb +42 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +16 -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 +123 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
- data/spec/mongo/collection/view/readable_spec.rb +251 -6
- data/spec/mongo/collection/view/writable_spec.rb +4 -4
- data/spec/mongo/collection/view_spec.rb +233 -71
- data/spec/mongo/collection_spec.rb +905 -9
- data/spec/mongo/crud_spec.rb +2 -2
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/dbref_spec.rb +149 -0
- data/spec/mongo/monitoring_spec.rb +168 -0
- data/spec/mongo/operation/map_reduce_spec.rb +1 -1
- data/spec/mongo/operation/write/bulk/bulk_delete_spec.rb +1 -1
- data/spec/mongo/operation/write/bulk/bulk_insert_spec.rb +2 -2
- data/spec/mongo/operation/write/bulk/bulk_update_spec.rb +1 -1
- data/spec/mongo/operation/write/delete_spec.rb +1 -1
- data/spec/mongo/operation/write/insert_spec.rb +2 -2
- data/spec/mongo/operation/write/update_spec.rb +1 -1
- data/spec/mongo/protocol/query_spec.rb +0 -29
- data/spec/mongo/server/connection_pool_spec.rb +18 -6
- data/spec/mongo/server/connection_spec.rb +12 -4
- data/spec/mongo/server/description_spec.rb +7 -3
- data/spec/mongo/server/monitor_spec.rb +30 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +11 -4
- data/spec/mongo/server_selection_spec.rb +14 -6
- data/spec/mongo/server_spec.rb +27 -8
- data/spec/mongo/socket/ssl_spec.rb +94 -8
- data/spec/mongo/uri_spec.rb +25 -9
- data/spec/spec_helper.rb +29 -20
- data/spec/support/authorization.rb +19 -4
- data/spec/support/certificates/client.pem +4 -4
- data/spec/support/crud/read.rb +9 -10
- data/spec/support/crud/write.rb +24 -20
- data/spec/support/sdam/rs/equal_electionids.yml +45 -0
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +98 -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/sharded/mongos_disconnect.yml +104 -0
- data/spec/support/server_discovery_and_monitoring.rb +19 -2
- data/spec/support/shared/bulk_write.rb +26 -22
- data/spec/support/shared/server_selector.rb +2 -1
- metadata +31 -7
- metadata.gz.sig +0 -0
- data/lib/mongo/error/invalid_uri_option.rb +0 -38
@@ -76,6 +76,11 @@ module Mongo
|
|
76
76
|
# @since 2.0.0
|
77
77
|
INDEX_NAME = :index_name.freeze
|
78
78
|
|
79
|
+
# The operation id constant.
|
80
|
+
#
|
81
|
+
# @since 2.1.0
|
82
|
+
OPERATION_ID = :operation_id.freeze
|
83
|
+
|
79
84
|
# The field for options.
|
80
85
|
#
|
81
86
|
# @since 2.0.0
|
@@ -287,6 +292,19 @@ module Mongo
|
|
287
292
|
@spec = spec
|
288
293
|
end
|
289
294
|
|
295
|
+
# Get the operation id for the operation. Used for linking operations in
|
296
|
+
# monitoring.
|
297
|
+
#
|
298
|
+
# @example Get the operation id.
|
299
|
+
# specifiable.operation_id
|
300
|
+
#
|
301
|
+
# @return [ Integer ] The operation id.
|
302
|
+
#
|
303
|
+
# @since 2.1.0
|
304
|
+
def operation_id
|
305
|
+
spec[OPERATION_ID]
|
306
|
+
end
|
307
|
+
|
290
308
|
# Get the options for the operation.
|
291
309
|
#
|
292
310
|
# @example Get the options.
|
@@ -94,7 +94,7 @@ module Mongo
|
|
94
94
|
def execute_message(context)
|
95
95
|
replies = messages.map do |m|
|
96
96
|
context.with_connection do |connection|
|
97
|
-
result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
|
97
|
+
result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id))
|
98
98
|
if stop_sending?(result)
|
99
99
|
return result
|
100
100
|
else
|
@@ -79,7 +79,7 @@ module Mongo
|
|
79
79
|
replies = []
|
80
80
|
messages.map do |m|
|
81
81
|
context.with_connection do |connection|
|
82
|
-
result = LegacyResult.new(connection.dispatch([ m, gle ].compact), @ids)
|
82
|
+
result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id), @ids)
|
83
83
|
replies << result.reply
|
84
84
|
if stop_sending?(result)
|
85
85
|
return LegacyResult.new(replies, @ids)
|
@@ -32,7 +32,7 @@ module Mongo
|
|
32
32
|
def aggregate_write_errors(indexes)
|
33
33
|
@replies.reduce(nil) do |errors, reply|
|
34
34
|
if reply.documents.first['writeErrors']
|
35
|
-
write_errors = reply.documents.first[
|
35
|
+
write_errors = reply.documents.first[Error::WRITE_ERRORS].collect do |we|
|
36
36
|
we.merge!('index' => indexes[we['index']])
|
37
37
|
end
|
38
38
|
(errors || []) << write_errors if write_errors
|
@@ -53,7 +53,7 @@ module Mongo
|
|
53
53
|
# @since 2.0.0
|
54
54
|
def aggregate_write_concern_errors(indexes)
|
55
55
|
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
56
|
-
if write_concern_errors = reply.documents.first[
|
56
|
+
if write_concern_errors = reply.documents.first[Error::WRITE_CONCERN_ERRORS]
|
57
57
|
(errors || []) << write_concern_errors.reduce(nil) do |errs, wce|
|
58
58
|
wce.merge!('index' => indexes[wce['index']])
|
59
59
|
(errs || []) << write_concern_error
|
@@ -101,7 +101,7 @@ module Mongo
|
|
101
101
|
def execute_message(context)
|
102
102
|
replies = messages.map do |m|
|
103
103
|
context.with_connection do |connection|
|
104
|
-
result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
|
104
|
+
result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id))
|
105
105
|
if stop_sending?(result)
|
106
106
|
return result
|
107
107
|
else
|
@@ -89,10 +89,22 @@ module Mongo
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
# Get the upserted documents.
|
93
|
+
#
|
94
|
+
# @example Get upserted documents.
|
95
|
+
# result.upserted
|
96
|
+
#
|
97
|
+
# @return [ Array<BSON::Document> ] The upserted document info
|
98
|
+
#
|
99
|
+
# @since 2.1.0
|
100
|
+
def upserted
|
101
|
+
reply.documents.first[UPSERTED] || []
|
102
|
+
end
|
103
|
+
|
92
104
|
private
|
93
105
|
|
94
106
|
def upsert?(reply)
|
95
|
-
|
107
|
+
upserted.any?
|
96
108
|
end
|
97
109
|
end
|
98
110
|
|
@@ -41,27 +41,22 @@ module Mongo
|
|
41
41
|
#
|
42
42
|
# Supported flags: +:single_remove+
|
43
43
|
def initialize(database, collection, selector, options = {})
|
44
|
+
@database = database
|
44
45
|
@namespace = "#{database}.#{collection}"
|
45
46
|
@selector = selector
|
46
47
|
@flags = options[:flags] || []
|
47
48
|
end
|
48
49
|
|
49
|
-
#
|
50
|
+
# Return the event payload for monitoring.
|
50
51
|
#
|
51
|
-
# @example
|
52
|
-
#
|
52
|
+
# @example Return the event payload.
|
53
|
+
# message.payload
|
53
54
|
#
|
54
|
-
# @return [
|
55
|
+
# @return [ Hash ] The event payload.
|
55
56
|
#
|
56
|
-
# @since 2.
|
57
|
-
def
|
58
|
-
|
59
|
-
fields << ["%s |", "DELETE"]
|
60
|
-
fields << ["namespace=%s", namespace]
|
61
|
-
fields << ["selector=%s", selector.inspect]
|
62
|
-
fields << ["flags=%s", flags.inspect]
|
63
|
-
f, v = fields.transpose
|
64
|
-
f.join(" ") % v
|
57
|
+
# @since 2.1.0
|
58
|
+
def payload
|
59
|
+
{ command_name: 'delete', database_name: @database, command: selector, request_id: request_id }
|
65
60
|
end
|
66
61
|
|
67
62
|
private
|
@@ -37,27 +37,27 @@ module Mongo
|
|
37
37
|
# @param number_to_return [Integer] The number of documents to return.
|
38
38
|
# @param cursor_id [Integer] The cursor id returned in a reply.
|
39
39
|
def initialize(database, collection, number_to_return, cursor_id)
|
40
|
+
@database = database
|
40
41
|
@namespace = "#{database}.#{collection}"
|
41
42
|
@number_to_return = number_to_return
|
42
43
|
@cursor_id = cursor_id
|
43
44
|
end
|
44
45
|
|
45
|
-
#
|
46
|
+
# Return the event payload for monitoring.
|
46
47
|
#
|
47
|
-
# @example
|
48
|
-
#
|
48
|
+
# @example Return the event payload.
|
49
|
+
# message.payload
|
49
50
|
#
|
50
|
-
# @return [
|
51
|
+
# @return [ Hash ] The event payload.
|
51
52
|
#
|
52
|
-
# @since 2.
|
53
|
-
def
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
f.join(" ") % v
|
53
|
+
# @since 2.1.0
|
54
|
+
def payload
|
55
|
+
{
|
56
|
+
command_name: 'getmore',
|
57
|
+
database_name: @database,
|
58
|
+
command: { cursor_id: cursor_id, number_to_return: number_to_return },
|
59
|
+
request_id: request_id
|
60
|
+
}
|
61
61
|
end
|
62
62
|
|
63
63
|
# Get more messages require replies from the database.
|
@@ -49,27 +49,22 @@ module Mongo
|
|
49
49
|
#
|
50
50
|
# Supported flags: +:continue_on_error+
|
51
51
|
def initialize(database, collection, documents, options = {})
|
52
|
+
@database = database
|
52
53
|
@namespace = "#{database}.#{collection}"
|
53
54
|
@documents = documents
|
54
55
|
@flags = options[:flags] || []
|
55
56
|
end
|
56
57
|
|
57
|
-
#
|
58
|
+
# Return the event payload for monitoring.
|
58
59
|
#
|
59
|
-
# @example
|
60
|
-
#
|
60
|
+
# @example Return the event payload.
|
61
|
+
# message.payload
|
61
62
|
#
|
62
|
-
# @return [
|
63
|
+
# @return [ Hash ] The event payload.
|
63
64
|
#
|
64
|
-
# @since 2.
|
65
|
-
def
|
66
|
-
|
67
|
-
fields << ["%s |", "INSERT"]
|
68
|
-
fields << ["namespace=%s", namespace]
|
69
|
-
fields << ["documents=%s", documents.inspect]
|
70
|
-
fields << ["flags=%s", flags.inspect]
|
71
|
-
f, v = fields.transpose
|
72
|
-
f.join(" ") % v
|
65
|
+
# @since 2.1.0
|
66
|
+
def payload
|
67
|
+
{ command_name: 'insert', database_name: @database, command: documents, request_id: request_id }
|
73
68
|
end
|
74
69
|
|
75
70
|
private
|
@@ -35,20 +35,16 @@ module Mongo
|
|
35
35
|
@id_count = @cursor_ids.size
|
36
36
|
end
|
37
37
|
|
38
|
-
#
|
38
|
+
# Return the event payload for monitoring.
|
39
39
|
#
|
40
|
-
# @example
|
41
|
-
#
|
40
|
+
# @example Return the event payload.
|
41
|
+
# message.payload
|
42
42
|
#
|
43
|
-
# @return [
|
43
|
+
# @return [ Hash ] The event payload.
|
44
44
|
#
|
45
|
-
# @since 2.
|
46
|
-
def
|
47
|
-
|
48
|
-
fields << ["%s |", "KILLCURSORS"]
|
49
|
-
fields << ["cursor_ids=%s", cursor_ids.inspect]
|
50
|
-
f, v = fields.transpose
|
51
|
-
f.join(" ") % v
|
45
|
+
# @since 2.1.0
|
46
|
+
def payload
|
47
|
+
{ command_name: 'killcursors', command: { cursor_ids: cursor_ids }, request_id: request_id }
|
52
48
|
end
|
53
49
|
|
54
50
|
private
|
data/lib/mongo/protocol/query.rb
CHANGED
@@ -64,33 +64,75 @@ module Mongo
|
|
64
64
|
# Supported flags: +:tailable_cursor+, +:slave_ok+, +:oplog_replay+,
|
65
65
|
# +:no_cursor_timeout+, +:await_data+, +:exhaust+, +:partial+
|
66
66
|
def initialize(database, collection, selector, options = {})
|
67
|
+
@database = database
|
67
68
|
@namespace = "#{database}.#{collection}"
|
68
69
|
@selector = selector
|
70
|
+
@options = options
|
69
71
|
@project = options[:project]
|
70
72
|
@skip = options[:skip] || 0
|
71
73
|
@limit = options[:limit] || 0
|
72
74
|
@flags = options[:flags] || []
|
73
75
|
end
|
74
76
|
|
75
|
-
#
|
77
|
+
# Return the event payload for monitoring.
|
76
78
|
#
|
77
|
-
# @example
|
78
|
-
#
|
79
|
+
# @example Return the event payload.
|
80
|
+
# message.payload
|
79
81
|
#
|
80
|
-
# @return [
|
82
|
+
# @return [ Hash ] The event payload.
|
81
83
|
#
|
82
|
-
# @since 2.
|
83
|
-
def
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
84
|
+
# @since 2.1.0
|
85
|
+
def payload
|
86
|
+
{
|
87
|
+
command_name: command_name,
|
88
|
+
database_name: @database,
|
89
|
+
command: arguments,
|
90
|
+
request_id: request_id
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
# If the message a command?
|
95
|
+
#
|
96
|
+
# @example Is the message a command?
|
97
|
+
# message.command?
|
98
|
+
#
|
99
|
+
# @return [ true, false ] If the message is a command.
|
100
|
+
#
|
101
|
+
# @since 2.1.0
|
102
|
+
def command?
|
103
|
+
namespace.include?(Database::COMMAND)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Returns the name of the command.
|
107
|
+
#
|
108
|
+
# @example Get the command name.
|
109
|
+
# message.command_name
|
110
|
+
#
|
111
|
+
# @return [ String ] The name of the command, or 'find' if a query.
|
112
|
+
#
|
113
|
+
# @since 2.1.0
|
114
|
+
def command_name
|
115
|
+
if command?
|
116
|
+
selector.keys.first
|
117
|
+
else
|
118
|
+
'find'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Get the command arguments.
|
123
|
+
#
|
124
|
+
# @example Get the command arguments.
|
125
|
+
# message.arguments
|
126
|
+
#
|
127
|
+
# @return [ Hash ] The command arguments.
|
128
|
+
#
|
129
|
+
# @since 2.1.0
|
130
|
+
def arguments
|
131
|
+
if command?
|
132
|
+
selector
|
133
|
+
else
|
134
|
+
{ filter: selector }.merge(@options)
|
135
|
+
end
|
94
136
|
end
|
95
137
|
|
96
138
|
# Query messages require replies from the database.
|
@@ -113,10 +155,6 @@ module Mongo
|
|
113
155
|
2004
|
114
156
|
end
|
115
157
|
|
116
|
-
def query_type
|
117
|
-
namespace.include?(Database::COMMAND) ? 'COMMAND' : 'QUERY'
|
118
|
-
end
|
119
|
-
|
120
158
|
def formatted_selector
|
121
159
|
( (str = selector.inspect).length > LOG_STRING_LIMIT ) ?
|
122
160
|
"#{str[0..LOG_STRING_LIMIT]}..." : str
|
data/lib/mongo/protocol/reply.rb
CHANGED
@@ -38,6 +38,18 @@ module Mongo
|
|
38
38
|
flags.include?(:query_failure)
|
39
39
|
end
|
40
40
|
|
41
|
+
# Return the event payload for monitoring.
|
42
|
+
#
|
43
|
+
# @example Return the event payload.
|
44
|
+
# message.payload
|
45
|
+
#
|
46
|
+
# @return [ Hash ] The event payload.
|
47
|
+
#
|
48
|
+
# @since 2.1.0
|
49
|
+
def payload
|
50
|
+
{ reply: documents, request_id: request_id }
|
51
|
+
end
|
52
|
+
|
41
53
|
private
|
42
54
|
|
43
55
|
# The operation code required to specify a Reply message.
|
@@ -52,29 +52,28 @@ module Mongo
|
|
52
52
|
#
|
53
53
|
# Supported flags: +:upsert+, +:multi_update+
|
54
54
|
def initialize(database, collection, selector, update, options = {})
|
55
|
+
@database = database
|
55
56
|
@namespace = "#{database}.#{collection}"
|
56
57
|
@selector = selector
|
57
58
|
@update = update
|
58
59
|
@flags = options[:flags] || []
|
59
60
|
end
|
60
61
|
|
61
|
-
#
|
62
|
+
# Return the event payload for monitoring.
|
62
63
|
#
|
63
|
-
# @example
|
64
|
-
#
|
64
|
+
# @example Return the event payload.
|
65
|
+
# message.payload
|
65
66
|
#
|
66
|
-
# @return [
|
67
|
+
# @return [ Hash ] The event payload.
|
67
68
|
#
|
68
|
-
# @since 2.
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
f, v = fields.transpose
|
77
|
-
f.join(" ") % v
|
69
|
+
# @since 2.1.0
|
70
|
+
def payload
|
71
|
+
{
|
72
|
+
command_name: 'update',
|
73
|
+
database_name: @database,
|
74
|
+
command: { filter: selector, update: update },
|
75
|
+
request_id: request_id
|
76
|
+
}
|
78
77
|
end
|
79
78
|
|
80
79
|
private
|
data/lib/mongo/server.rb
CHANGED
@@ -40,6 +40,9 @@ module Mongo
|
|
40
40
|
# @return [ Hash ] The options hash.
|
41
41
|
attr_reader :options
|
42
42
|
|
43
|
+
# @return [ Monitoring ] monitoring The monitoring.
|
44
|
+
attr_reader :monitoring
|
45
|
+
|
43
46
|
# Get the description from the monitor and scan on monitor.
|
44
47
|
def_delegators :monitor, :description, :scan!
|
45
48
|
|
@@ -107,18 +110,24 @@ module Mongo
|
|
107
110
|
# Instantiate a new server object. Will start the background refresh and
|
108
111
|
# subscribe to the appropriate events.
|
109
112
|
#
|
113
|
+
# @api private
|
114
|
+
#
|
110
115
|
# @example Initialize the server.
|
111
|
-
# Mongo::Server.new('127.0.0.1:27017', cluster, listeners)
|
116
|
+
# Mongo::Server.new('127.0.0.1:27017', cluster, monitoring, listeners)
|
117
|
+
#
|
118
|
+
# @note Server must never be directly instantiated outside of a Cluster.
|
112
119
|
#
|
113
120
|
# @param [ Address ] address The host:port address to connect to.
|
114
121
|
# @param [ Cluster ] cluster The cluster the server belongs to.
|
122
|
+
# @param [ Monitoring ] monitoring The monitoring.
|
115
123
|
# @param [ Event::Listeners ] event_listeners The event listeners.
|
116
124
|
# @param [ Hash ] options The server options.
|
117
125
|
#
|
118
126
|
# @since 2.0.0
|
119
|
-
def initialize(address, cluster, event_listeners, options = {})
|
127
|
+
def initialize(address, cluster, monitoring, event_listeners, options = {})
|
120
128
|
@address = address
|
121
129
|
@cluster = cluster
|
130
|
+
@monitoring = monitoring
|
122
131
|
@options = options.freeze
|
123
132
|
@monitor = Monitor.new(address, event_listeners, options)
|
124
133
|
monitor.scan!
|
@@ -164,5 +173,17 @@ module Mongo
|
|
164
173
|
tags[k] && tags[k] == tag_set[k]
|
165
174
|
end
|
166
175
|
end
|
176
|
+
|
177
|
+
# Restart the server monitor.
|
178
|
+
#
|
179
|
+
# @example Restart the server monitor.
|
180
|
+
# server.reconnect!
|
181
|
+
#
|
182
|
+
# @return [ true ] Always true.
|
183
|
+
#
|
184
|
+
# @since 2.1.0
|
185
|
+
def reconnect!
|
186
|
+
monitor.restart! and true
|
187
|
+
end
|
167
188
|
end
|
168
189
|
end
|