mongo 2.7.2 → 2.8.0.rc0
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 +1 -3
- data/lib/mongo/address.rb +17 -20
- data/lib/mongo/address/ipv4.rb +6 -3
- data/lib/mongo/address/ipv6.rb +6 -3
- data/lib/mongo/address/unix.rb +5 -2
- data/lib/mongo/auth.rb +15 -2
- data/lib/mongo/auth/cr/conversation.rb +4 -2
- data/lib/mongo/auth/ldap/conversation.rb +4 -2
- data/lib/mongo/auth/scram.rb +3 -7
- data/lib/mongo/auth/scram/conversation.rb +28 -19
- data/lib/mongo/auth/user.rb +45 -10
- data/lib/mongo/auth/x509/conversation.rb +4 -2
- data/lib/mongo/cluster.rb +9 -17
- data/lib/mongo/error.rb +2 -0
- data/lib/mongo/error/missing_password.rb +29 -0
- data/lib/mongo/error/operation_failure.rb +7 -3
- data/lib/mongo/error/parser.rb +2 -1
- data/lib/mongo/error/sdam_error_detection.rb +54 -0
- data/lib/mongo/operation/aggregate/command.rb +1 -16
- data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
- data/lib/mongo/operation/collections_info.rb +2 -3
- data/lib/mongo/operation/delete/command.rb +2 -15
- data/lib/mongo/operation/delete/legacy.rb +1 -16
- data/lib/mongo/operation/explain/command.rb +1 -16
- data/lib/mongo/operation/explain/legacy.rb +1 -16
- data/lib/mongo/operation/find/command.rb +1 -16
- data/lib/mongo/operation/find/legacy.rb +1 -16
- data/lib/mongo/operation/get_more/command.rb +1 -16
- data/lib/mongo/operation/indexes/command.rb +1 -16
- data/lib/mongo/operation/indexes/legacy.rb +4 -16
- data/lib/mongo/operation/list_collections/command.rb +1 -16
- data/lib/mongo/operation/map_reduce/command.rb +1 -16
- data/lib/mongo/operation/parallel_scan/command.rb +1 -16
- data/lib/mongo/operation/result.rb +3 -0
- data/lib/mongo/operation/shared/executable.rb +4 -0
- data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
- data/lib/mongo/operation/shared/polymorphic_result.rb +8 -1
- data/lib/mongo/operation/shared/result/aggregatable.rb +0 -5
- data/lib/mongo/operation/update/command.rb +2 -15
- data/lib/mongo/operation/update/legacy.rb +1 -16
- data/lib/mongo/operation/users_info/command.rb +1 -16
- data/lib/mongo/retryable.rb +22 -10
- data/lib/mongo/server.rb +10 -1
- data/lib/mongo/server/app_metadata.rb +7 -2
- data/lib/mongo/server/connectable.rb +0 -6
- data/lib/mongo/server/connection.rb +86 -135
- data/lib/mongo/server/connection_base.rb +133 -0
- data/lib/mongo/server/connection_pool.rb +11 -24
- data/lib/mongo/server/connection_pool/queue.rb +41 -41
- data/lib/mongo/server/description.rb +1 -1
- data/lib/mongo/server/monitor.rb +4 -4
- data/lib/mongo/server/monitor/connection.rb +26 -7
- data/lib/mongo/server/pending_connection.rb +36 -0
- data/lib/mongo/server_selector/selectable.rb +9 -1
- data/lib/mongo/session.rb +0 -1
- data/lib/mongo/socket.rb +23 -6
- data/lib/mongo/socket/ssl.rb +11 -18
- data/lib/mongo/socket/tcp.rb +13 -14
- data/lib/mongo/socket/unix.rb +9 -27
- data/lib/mongo/uri.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/integration/auth_spec.rb +160 -0
- data/spec/integration/retryable_writes_spec.rb +55 -58
- data/spec/integration/sdam_error_handling_spec.rb +115 -0
- data/spec/mongo/address/ipv4_spec.rb +4 -0
- data/spec/mongo/address/ipv6_spec.rb +4 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +6 -5
- data/spec/mongo/auth/scram/negotiation_spec.rb +25 -36
- data/spec/mongo/auth/scram_spec.rb +2 -2
- data/spec/mongo/auth/user_spec.rb +97 -0
- data/spec/mongo/client_construction_spec.rb +1 -1
- data/spec/mongo/error/operation_failure_spec.rb +125 -1
- data/spec/mongo/retryable_spec.rb +17 -8
- data/spec/mongo/server/connection_pool/queue_spec.rb +24 -10
- data/spec/mongo/server/connection_pool_spec.rb +30 -117
- data/spec/mongo/server/connection_spec.rb +147 -25
- data/spec/mongo/server/description_spec.rb +0 -14
- data/spec/mongo/server/monitor/connection_spec.rb +22 -0
- data/spec/mongo/server_selector_spec.rb +1 -0
- data/spec/mongo/server_spec.rb +6 -6
- data/spec/mongo/socket/ssl_spec.rb +48 -116
- data/spec/mongo/socket/tcp_spec.rb +22 -0
- data/spec/mongo/socket/unix_spec.rb +9 -9
- data/spec/mongo/socket_spec.rb +15 -3
- data/spec/spec_tests/server_selection_spec.rb +2 -0
- data/spec/support/client_registry.rb +8 -2
- data/spec/support/common_shortcuts.rb +20 -1
- data/spec/support/constraints.rb +10 -2
- data/spec/support/lite_constraints.rb +8 -0
- data/spec/support/spec_config.rb +9 -1
- metadata +14 -4
- metadata.gz.sig +0 -0
@@ -51,7 +51,7 @@ module Mongo
|
|
51
51
|
end
|
52
52
|
|
53
53
|
# Start the x.509 conversation. This returns the first message that
|
54
|
-
# needs to be
|
54
|
+
# needs to be sent to the server.
|
55
55
|
#
|
56
56
|
# @example Start the conversation.
|
57
57
|
# conversation.start
|
@@ -95,7 +95,9 @@ module Mongo
|
|
95
95
|
private
|
96
96
|
|
97
97
|
def validate!(reply)
|
98
|
-
|
98
|
+
if reply.documents[0][Operation::Result::OK] != 1
|
99
|
+
raise Unauthorized.new(user, MECHANISM)
|
100
|
+
end
|
99
101
|
@reply = reply
|
100
102
|
end
|
101
103
|
end
|
data/lib/mongo/cluster.rb
CHANGED
@@ -99,7 +99,6 @@ module Mongo
|
|
99
99
|
@app_metadata = Server::AppMetadata.new(@options)
|
100
100
|
@update_lock = Mutex.new
|
101
101
|
@sdam_flow_lock = Mutex.new
|
102
|
-
@pool_lock = Mutex.new
|
103
102
|
@cluster_time = nil
|
104
103
|
@cluster_time_lock = Mutex.new
|
105
104
|
@topology = Topology.initial(self, monitoring, options)
|
@@ -153,7 +152,7 @@ module Mongo
|
|
153
152
|
@periodic_executor = PeriodicExecutor.new(@cursor_reaper, @socket_reaper)
|
154
153
|
@periodic_executor.run!
|
155
154
|
|
156
|
-
ObjectSpace.define_finalizer(self, self.class.finalize(
|
155
|
+
ObjectSpace.define_finalizer(self, self.class.finalize({}, @periodic_executor, @session_pool))
|
157
156
|
|
158
157
|
@connecting = false
|
159
158
|
@connected = true
|
@@ -341,15 +340,16 @@ module Mongo
|
|
341
340
|
end
|
342
341
|
|
343
342
|
# @api private
|
344
|
-
|
343
|
+
def server_selection_semaphore
|
344
|
+
options[:server_selection_semaphore]
|
345
|
+
end
|
345
346
|
|
346
|
-
# Finalize the cluster for garbage collection.
|
347
|
-
# connection pools.
|
347
|
+
# Finalize the cluster for garbage collection.
|
348
348
|
#
|
349
349
|
# @example Finalize the cluster.
|
350
350
|
# Cluster.finalize(pools)
|
351
351
|
#
|
352
|
-
# @param [ Hash<Address, Server::ConnectionPool> ] pools
|
352
|
+
# @param [ Hash<Address, Server::ConnectionPool> ] pools Ignored.
|
353
353
|
# @param [ PeriodicExecutor ] periodic_executor The periodic executor.
|
354
354
|
# @param [ SessionPool ] session_pool The session pool.
|
355
355
|
#
|
@@ -360,9 +360,6 @@ module Mongo
|
|
360
360
|
proc do
|
361
361
|
session_pool.end_sessions
|
362
362
|
periodic_executor.stop!
|
363
|
-
pools.values.each do |pool|
|
364
|
-
pool.disconnect!
|
365
|
-
end
|
366
363
|
end
|
367
364
|
end
|
368
365
|
|
@@ -523,7 +520,7 @@ module Mongo
|
|
523
520
|
@primary_selector.select_server(self)
|
524
521
|
end
|
525
522
|
|
526
|
-
# Get the
|
523
|
+
# Get the connection pool for the server.
|
527
524
|
#
|
528
525
|
# @example Get the connection pool.
|
529
526
|
# cluster.pool(server)
|
@@ -533,10 +530,9 @@ module Mongo
|
|
533
530
|
# @return [ Server::ConnectionPool ] The connection pool.
|
534
531
|
#
|
535
532
|
# @since 2.2.0
|
533
|
+
# @deprecated
|
536
534
|
def pool(server)
|
537
|
-
|
538
|
-
pools[server.address] ||= Server::ConnectionPool.get(server)
|
539
|
-
end
|
535
|
+
server.pool
|
540
536
|
end
|
541
537
|
|
542
538
|
# Update the max cluster time seen in a response.
|
@@ -675,10 +671,6 @@ module Mongo
|
|
675
671
|
false
|
676
672
|
end
|
677
673
|
end
|
678
|
-
|
679
|
-
def pools
|
680
|
-
@pools ||= {}
|
681
|
-
end
|
682
674
|
end
|
683
675
|
end
|
684
676
|
|
data/lib/mongo/error.rb
CHANGED
@@ -134,6 +134,7 @@ module Mongo
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
+
require 'mongo/error/sdam_error_detection'
|
137
138
|
require 'mongo/error/parser'
|
138
139
|
require 'mongo/error/write_retryable'
|
139
140
|
require 'mongo/error/change_stream_resumable'
|
@@ -179,6 +180,7 @@ require 'mongo/error/unchangeable_collection_option'
|
|
179
180
|
require 'mongo/error/unexpected_chunk_length'
|
180
181
|
require 'mongo/error/unexpected_response'
|
181
182
|
require 'mongo/error/missing_file_chunk'
|
183
|
+
require 'mongo/error/missing_password'
|
182
184
|
require 'mongo/error/missing_resume_token'
|
183
185
|
require 'mongo/error/unsupported_array_filters'
|
184
186
|
require 'mongo/error/unknown_payload_type'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Copyright (C) 2019 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Error
|
17
|
+
|
18
|
+
# Raised when the operations that require a password (e.g. retrieving
|
19
|
+
# a salted or hashed password) are attempted on a User object that was
|
20
|
+
# not created with a password.
|
21
|
+
#
|
22
|
+
# @since 2.8.0
|
23
|
+
class MissingPassword < Error
|
24
|
+
def initialize(msg = nil)
|
25
|
+
super(msg || 'User was created without a password')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -20,6 +20,7 @@ module Mongo
|
|
20
20
|
# @since 2.0.0
|
21
21
|
class OperationFailure < Error
|
22
22
|
extend Forwardable
|
23
|
+
include SdamErrorDetection
|
23
24
|
|
24
25
|
# Error codes and code names that should result in a failing write
|
25
26
|
# being retried.
|
@@ -28,7 +29,7 @@ module Mongo
|
|
28
29
|
# @api private
|
29
30
|
WRITE_RETRY_ERRORS = [
|
30
31
|
{:code_name => 'InterruptedAtShutdown', :code => 11600},
|
31
|
-
{:code_name => '
|
32
|
+
{:code_name => 'InterruptedDueToStepDown', :code => 11602},
|
32
33
|
{:code_name => 'NotMaster', :code => 10107},
|
33
34
|
{:code_name => 'NotMasterNoSlaveOk', :code => 13435},
|
34
35
|
{:code_name => 'NotMasterOrSecondary', :code => 13436},
|
@@ -175,6 +176,9 @@ module Mongo
|
|
175
176
|
#
|
176
177
|
# @option options [ Integer ] :code Error code
|
177
178
|
# @option options [ String ] :code_name Error code name
|
179
|
+
# @option options [ Array<String> ] :labels The set of labels associated
|
180
|
+
# with the error
|
181
|
+
# @option options [ true | false ] :wtimeout Whether the error is a wtimeout
|
178
182
|
#
|
179
183
|
# @since 2.5.0, options added in 2.6.0
|
180
184
|
def initialize(message = nil, result = nil, options = {})
|
@@ -186,9 +190,9 @@ module Mongo
|
|
186
190
|
super(message)
|
187
191
|
end
|
188
192
|
|
189
|
-
# Whether the error
|
193
|
+
# Whether the error is a write concern timeout.
|
190
194
|
#
|
191
|
-
# @return [ true | false ] Whether the error
|
195
|
+
# @return [ true | false ] Whether the error is a write concern timeout.
|
192
196
|
#
|
193
197
|
# @since 2.7.1
|
194
198
|
def wtimeout?
|
data/lib/mongo/error/parser.rb
CHANGED
@@ -44,6 +44,7 @@ module Mongo
|
|
44
44
|
#
|
45
45
|
# @since 2.0.0
|
46
46
|
class Parser
|
47
|
+
include SdamErrorDetection
|
47
48
|
|
48
49
|
# @return [ BSON::Document ] document The returned document.
|
49
50
|
attr_reader :document
|
@@ -62,7 +63,7 @@ module Mongo
|
|
62
63
|
# @since 2.6.0
|
63
64
|
attr_reader :code_name
|
64
65
|
|
65
|
-
# @return [ Array ] labels The set of labels associated with the error.
|
66
|
+
# @return [ Array<String> ] labels The set of labels associated with the error.
|
66
67
|
# @since 2.7.0
|
67
68
|
attr_reader :labels
|
68
69
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Mongo
|
2
|
+
class Error
|
3
|
+
# @note Although not_master? and node_recovering? methods of this module
|
4
|
+
# are part of the public API, the fact that these methods are defined on
|
5
|
+
# this module and not on the classes which include this module is not
|
6
|
+
# part of the public API.
|
7
|
+
#
|
8
|
+
# @api semipublic
|
9
|
+
module SdamErrorDetection
|
10
|
+
|
11
|
+
# @api private
|
12
|
+
NOT_MASTER_CODES = [10107, 13435].freeze
|
13
|
+
|
14
|
+
# @api private
|
15
|
+
NODE_RECOVERING_CODES = [11600, 11602, 13436, 189, 91].freeze
|
16
|
+
|
17
|
+
# Whether the error is a "not master" error, or one of its variants.
|
18
|
+
#
|
19
|
+
# See https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#not-master-and-node-is-recovering.
|
20
|
+
#
|
21
|
+
# @return [ true | false ] Whether the error is a not master.
|
22
|
+
#
|
23
|
+
# @since 2.8.0
|
24
|
+
def not_master?
|
25
|
+
if node_recovering?
|
26
|
+
false
|
27
|
+
elsif code && NOT_MASTER_CODES.include?(code)
|
28
|
+
true
|
29
|
+
elsif message
|
30
|
+
message.include?('not master')
|
31
|
+
else
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Whether the error is a "node is recovering" error, or one of its variants.
|
37
|
+
#
|
38
|
+
# See https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#not-master-and-node-is-recovering.
|
39
|
+
#
|
40
|
+
# @return [ true | false ] Whether the error is a node is recovering.
|
41
|
+
#
|
42
|
+
# @since 2.8.0
|
43
|
+
def node_recovering?
|
44
|
+
if code && NODE_RECOVERING_CODES.include?(code)
|
45
|
+
true
|
46
|
+
elsif message
|
47
|
+
message.include?('node is recovering') || message.include?('not master or secondary')
|
48
|
+
else
|
49
|
+
false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -24,26 +24,11 @@ module Mongo
|
|
24
24
|
class Command
|
25
25
|
include Specifiable
|
26
26
|
include Executable
|
27
|
+
include PolymorphicResult
|
27
28
|
include ReadPreferenceSupported
|
28
29
|
include WriteConcernSupported
|
29
30
|
include Limited
|
30
31
|
|
31
|
-
# Execute the operation.
|
32
|
-
#
|
33
|
-
# @example
|
34
|
-
# operation.execute(server)
|
35
|
-
#
|
36
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
37
|
-
#
|
38
|
-
# @return [ Mongo::Operation::Aggregate::Result ] The operation result.
|
39
|
-
#
|
40
|
-
# @since 2.5.2
|
41
|
-
def execute(server)
|
42
|
-
result = Result.new(dispatch_message(server))
|
43
|
-
process_result(result, server)
|
44
|
-
result.validate!
|
45
|
-
end
|
46
|
-
|
47
32
|
private
|
48
33
|
|
49
34
|
def write_concern_supported?(server)
|
@@ -26,6 +26,7 @@ module Mongo
|
|
26
26
|
include Specifiable
|
27
27
|
include Executable
|
28
28
|
include ReadPreferenceSupported
|
29
|
+
include PolymorphicResult
|
29
30
|
|
30
31
|
# Execute the operation.
|
31
32
|
#
|
@@ -43,9 +44,7 @@ module Mongo
|
|
43
44
|
return Operation::ListCollections.new(spec).execute(server)
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
-
process_result(result, server)
|
48
|
-
result.validate!
|
47
|
+
super
|
49
48
|
end
|
50
49
|
|
51
50
|
private
|
@@ -26,21 +26,8 @@ module Mongo
|
|
26
26
|
include Executable
|
27
27
|
include Limited
|
28
28
|
include WriteConcernSupported
|
29
|
-
|
30
|
-
|
31
|
-
#
|
32
|
-
# @example
|
33
|
-
# operation.execute(server)
|
34
|
-
#
|
35
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
36
|
-
#
|
37
|
-
# @return [ Mongo::Operation::Delete::Result ] The operation result.
|
38
|
-
#
|
39
|
-
# @since 2.5.2
|
40
|
-
def execute(server)
|
41
|
-
result = Result.new(dispatch_message(server))
|
42
|
-
process_result(result, server)
|
43
|
-
end
|
29
|
+
include ExecutableNoValidate
|
30
|
+
include PolymorphicResult
|
44
31
|
|
45
32
|
private
|
46
33
|
|
@@ -24,22 +24,7 @@ module Mongo
|
|
24
24
|
class Legacy
|
25
25
|
include Specifiable
|
26
26
|
include Executable
|
27
|
-
|
28
|
-
# Execute the operation.
|
29
|
-
#
|
30
|
-
# @example
|
31
|
-
# operation.execute(server)
|
32
|
-
#
|
33
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
34
|
-
#
|
35
|
-
# @return [ Mongo::Operation::Delete::Result ] The operation result.
|
36
|
-
#
|
37
|
-
# @since 2.5.2
|
38
|
-
def execute(server)
|
39
|
-
result = Result.new(dispatch_message(server))
|
40
|
-
process_result(result, server)
|
41
|
-
result.validate!
|
42
|
-
end
|
27
|
+
include PolymorphicResult
|
43
28
|
|
44
29
|
private
|
45
30
|
|
@@ -26,22 +26,7 @@ module Mongo
|
|
26
26
|
include Executable
|
27
27
|
include Limited
|
28
28
|
include ReadPreferenceSupported
|
29
|
-
|
30
|
-
# Execute the operation.
|
31
|
-
#
|
32
|
-
# @example
|
33
|
-
# operation.execute(server)
|
34
|
-
#
|
35
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
36
|
-
#
|
37
|
-
# @return [ Mongo::Operation::Explain::Result ] The operation result.
|
38
|
-
#
|
39
|
-
# @since 2.5.2
|
40
|
-
def execute(server)
|
41
|
-
result = Result.new(dispatch_message(server))
|
42
|
-
process_result(result, server)
|
43
|
-
result.validate!
|
44
|
-
end
|
29
|
+
include PolymorphicResult
|
45
30
|
|
46
31
|
private
|
47
32
|
|
@@ -25,22 +25,7 @@ module Mongo
|
|
25
25
|
include Specifiable
|
26
26
|
include Executable
|
27
27
|
include ReadPreferenceSupported
|
28
|
-
|
29
|
-
# Execute the operation.
|
30
|
-
#
|
31
|
-
# @example
|
32
|
-
# operation.execute(server)
|
33
|
-
#
|
34
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
35
|
-
#
|
36
|
-
# @return [ Mongo::Operation::Explain::Result ] The operation result.
|
37
|
-
#
|
38
|
-
# @since 2.5.2
|
39
|
-
def execute(server)
|
40
|
-
result = Result.new(dispatch_message(server))
|
41
|
-
process_result(result, server)
|
42
|
-
result.validate!
|
43
|
-
end
|
28
|
+
include PolymorphicResult
|
44
29
|
|
45
30
|
private
|
46
31
|
|
@@ -26,22 +26,7 @@ module Mongo
|
|
26
26
|
include Executable
|
27
27
|
include Limited
|
28
28
|
include ReadPreferenceSupported
|
29
|
-
|
30
|
-
# Execute the operation.
|
31
|
-
#
|
32
|
-
# @example
|
33
|
-
# operation.execute(server)
|
34
|
-
#
|
35
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
36
|
-
#
|
37
|
-
# @return [ Mongo::Operation::Find::Result ] The operation result.
|
38
|
-
#
|
39
|
-
# @since 2.5.2
|
40
|
-
def execute(server)
|
41
|
-
result = Result.new(dispatch_message(server))
|
42
|
-
process_result(result, server)
|
43
|
-
result.validate!
|
44
|
-
end
|
29
|
+
include PolymorphicResult
|
45
30
|
|
46
31
|
private
|
47
32
|
|
@@ -27,22 +27,7 @@ module Mongo
|
|
27
27
|
include Specifiable
|
28
28
|
include Executable
|
29
29
|
include ReadPreferenceSupported
|
30
|
-
|
31
|
-
# Execute the operation.
|
32
|
-
#
|
33
|
-
# @example
|
34
|
-
# operation.execute(server)
|
35
|
-
#
|
36
|
-
# @param [ Mongo::Server ] server The server to send the operation to.
|
37
|
-
#
|
38
|
-
# @return [ Mongo::Operation::Find::Result ] The operation result.
|
39
|
-
#
|
40
|
-
# @since 2.5.2
|
41
|
-
def execute(server)
|
42
|
-
result = Result.new(dispatch_message(server))
|
43
|
-
process_result(result, server)
|
44
|
-
result.validate!
|
45
|
-
end
|
30
|
+
include PolymorphicResult
|
46
31
|
|
47
32
|
private
|
48
33
|
|