Skip to content

Commit 6f0a128

Browse files
authored
RUBY-1580 Deduplicate code across OP_MSG operation classes (#1155)
1 parent 2f65520 commit 6f0a128

File tree

30 files changed

+210
-539
lines changed

30 files changed

+210
-539
lines changed

lib/mongo/operation.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
require 'mongo/operation/result'
33

44
require 'mongo/operation/shared/executable'
5+
require 'mongo/operation/shared/executable_no_validate'
6+
require 'mongo/operation/shared/executable_transaction_label'
7+
require 'mongo/operation/shared/polymorphic_result'
58
require 'mongo/operation/shared/read_preference_supported'
69
require 'mongo/operation/shared/bypass_document_validation'
710
require 'mongo/operation/shared/write_concern_supported'
@@ -13,6 +16,7 @@
1316
require 'mongo/operation/shared/specifiable'
1417
require 'mongo/operation/shared/object_id_generator'
1518

19+
require 'mongo/operation/op_msg_base'
1620
require 'mongo/operation/command'
1721
require 'mongo/operation/aggregate'
1822
require 'mongo/operation/result'

lib/mongo/operation/aggregate/op_msg.rb

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,10 @@ class Aggregate
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
24+
class OpMsg < OpMsgBase
2825
include CausalConsistencySupported
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::Aggregate::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-
rescue Mongo::Error::SocketError => e
45-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
46-
raise e
47-
end
48-
49-
private
50-
51-
def message(server)
52-
Protocol::Msg.new(flags, options, command(server))
53-
end
26+
include PolymorphicResult
27+
include ExecutableTransactionLabel
5428
end
5529
end
5630
end

lib/mongo/operation/command/op_msg.rb

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,32 +21,7 @@ class Command
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
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::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
44-
45-
private
46-
47-
def message(server)
48-
Protocol::Msg.new(flags, options, command(server))
49-
end
24+
class OpMsg < OpMsgBase
5025
end
5126
end
5227
end

lib/mongo/operation/count/op_msg.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,8 @@ class Count
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
24+
class OpMsg < OpMsgBase
2825
include CausalConsistencySupported
29-
30-
private
31-
32-
def message(server)
33-
Protocol::Msg.new(flags, options, command(server))
34-
end
3526
end
3627
end
3728
end

lib/mongo/operation/create/op_msg.rb

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,8 @@ class Create
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
28-
29-
def execute(server)
30-
result = Result.new(dispatch_message(server))
31-
process_result(result, server)
32-
result.validate!
33-
rescue Mongo::Error::SocketError => e
34-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
35-
raise e
36-
end
37-
38-
private
39-
40-
def message(server)
41-
Protocol::Msg.new(flags, options, command(server))
42-
end
24+
class OpMsg < OpMsgBase
25+
include ExecutableTransactionLabel
4326
end
4427
end
4528
end

lib/mongo/operation/create_index/op_msg.rb

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,14 @@ class CreateIndex
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
28-
29-
def execute(server)
30-
result = Result.new(dispatch_message(server))
31-
process_result(result, server)
32-
result.validate!
33-
rescue Mongo::Error::SocketError => e
34-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
35-
raise e
36-
end
24+
class OpMsg < OpMsgBase
25+
include ExecutableTransactionLabel
3726

3827
private
3928

4029
def selector(server)
4130
{ :createIndexes => coll_name, :indexes => indexes }
4231
end
43-
44-
def message(server)
45-
Protocol::Msg.new(flags, options, command(server))
46-
end
4732
end
4833
end
4934
end

lib/mongo/operation/create_user/op_msg.rb

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,14 @@ class CreateUser
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
28-
29-
def execute(server)
30-
result = Result.new(dispatch_message(server))
31-
process_result(result, server)
32-
result.validate!
33-
rescue Mongo::Error::SocketError => e
34-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
35-
raise e
36-
end
24+
class OpMsg < OpMsgBase
25+
include ExecutableTransactionLabel
3726

3827
private
3928

4029
def selector(server)
4130
{ :createUser => user.name }.merge(user.spec)
4231
end
43-
44-
def message(server)
45-
Protocol::Msg.new(flags, options, command(server))
46-
end
4732
end
4833
end
4934
end

lib/mongo/operation/delete/op_msg.rb

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,11 @@ class Delete
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
24+
class OpMsg < OpMsgBase
2825
include BypassDocumentValidation
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::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-
rescue Mongo::Error::SocketError => e
44-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
45-
raise e
46-
end
26+
include ExecutableNoValidate
27+
include ExecutableTransactionLabel
28+
include PolymorphicResult
4729

4830
private
4931

lib/mongo/operation/distinct/op_msg.rb

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,9 @@ class Distinct
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
24+
class OpMsg < OpMsgBase
2825
include CausalConsistencySupported
29-
30-
def execute(server)
31-
result = Result.new(dispatch_message(server))
32-
process_result(result, server)
33-
result.validate!
34-
rescue Mongo::Error::SocketError => e
35-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
36-
raise e
37-
end
38-
39-
private
40-
41-
def message(server)
42-
Protocol::Msg.new(flags, options, command(server))
43-
end
26+
include ExecutableTransactionLabel
4427
end
4528
end
4629
end

lib/mongo/operation/drop/op_msg.rb

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,8 @@ class Drop
2121
# @api private
2222
#
2323
# @since 2.5.2
24-
class OpMsg
25-
include Specifiable
26-
include Executable
27-
include SessionsSupported
28-
29-
def execute(server)
30-
result = Result.new(dispatch_message(server))
31-
process_result(result, server)
32-
result.validate!
33-
rescue Mongo::Error::SocketError => e
34-
e.send(:add_label, Mongo::Error::TRANSIENT_TRANSACTION_ERROR_LABEL) if session.in_transaction?
35-
raise e
36-
end
37-
38-
private
39-
40-
def message(server)
41-
Protocol::Msg.new(flags, options, command(server))
42-
end
24+
class OpMsg < OpMsgBase
25+
include ExecutableTransactionLabel
4326
end
4427
end
4528
end

0 commit comments

Comments
 (0)