Skip to content

Commit a3c48fc

Browse files
committed
RUBY-1028: Improve performance of 2.4 monitoring
1 parent b8871ab commit a3c48fc

File tree

14 files changed

+129
-75
lines changed

14 files changed

+129
-75
lines changed

lib/mongo/bulk_write/transformable.rb

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ module Transformable
5656
#
5757
# @since 2.1.0
5858
DELETE_MANY_TRANSFORM = ->(doc){
59-
{ q: doc[:filter], limit: 0 }
59+
{ Operation::Q => doc[:filter], Operation::LIMIT => 0 }
6060
}
6161

6262
# Proc to transform delete one ops.
6363
#
6464
# @since 2.1.0
6565
DELETE_ONE_TRANSFORM = ->(doc){
66-
{ q: doc[:filter], limit: 1 }
66+
{ Operation::Q => doc[:filter], Operation::LIMIT => 1 }
6767
}
6868

6969
# Proc to transform insert one ops.
@@ -77,21 +77,36 @@ module Transformable
7777
#
7878
# @since 2.1.0
7979
REPLACE_ONE_TRANSFORM = ->(doc){
80-
{ q: doc[:filter], u: doc[:replacement], multi: false, upsert: doc.fetch(:upsert, false) }
80+
{
81+
Operation::Q => doc[:filter],
82+
Operation::U => doc[:replacement],
83+
Operation::MULTI => false,
84+
Operation::UPSERT => doc.fetch(:upsert, false)
85+
}
8186
}
8287

8388
# Proc to transform update many ops.
8489
#
8590
# @since 2.1.0
8691
UPDATE_MANY_TRANSFORM = ->(doc){
87-
{ q: doc[:filter], u: doc[:update], multi: true, upsert: doc.fetch(:upsert, false) }
92+
{
93+
Operation::Q => doc[:filter],
94+
Operation::U => doc[:update],
95+
Operation::MULTI => true,
96+
Operation::UPSERT => doc.fetch(:upsert, false)
97+
}
8898
}
8999

90100
# Proc to transform update one ops.
91101
#
92102
# @since 2.1.0
93103
UPDATE_ONE_TRANSFORM = ->(doc){
94-
{ q: doc[:filter], u: doc[:update], multi: false, upsert: doc.fetch(:upsert, false) }
104+
{
105+
Operation::Q => doc[:filter],
106+
Operation::U => doc[:update],
107+
Operation::MULTI => false,
108+
Operation::UPSERT => doc.fetch(:upsert, false)
109+
}
95110
}
96111

97112
# Document mappers from the bulk api input into proper commands.

lib/mongo/collection/view/writable.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def update_one(spec, opts = {})
172172
def remove(value)
173173
write_with_retry do
174174
Operation::Write::Delete.new(
175-
:delete => { q: selector, limit: value },
175+
:delete => { Operation::Q => selector, Operation::LIMIT => value },
176176
:db_name => collection.database.name,
177177
:coll_name => collection.name,
178178
:write_concern => collection.write_concern
@@ -183,10 +183,10 @@ def remove(value)
183183
def update(spec, multi, opts)
184184
write_with_retry do
185185
Operation::Write::Update.new(
186-
:update => { q: selector,
187-
u: spec,
188-
multi: multi,
189-
upsert: !!opts[:upsert] },
186+
:update => { Operation::Q => selector,
187+
Operation::U => spec,
188+
Operation::MULTI => multi,
189+
Operation::UPSERT => !!opts[:upsert] },
190190
:db_name => collection.database.name,
191191
:coll_name => collection.name,
192192
:write_concern => collection.write_concern

lib/mongo/operation.rb

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,34 @@
2020
require 'mongo/operation/read'
2121
require 'mongo/operation/write'
2222
require 'mongo/operation/commands'
23-
require 'mongo/operation/kill_cursors'
23+
require 'mongo/operation/kill_cursors'
24+
25+
module Mongo
26+
module Operation
27+
28+
# The q field constant.
29+
#
30+
# @since 2.1.0
31+
Q = 'q'.freeze
32+
33+
# The u field constant.
34+
#
35+
# @since 2.1.0
36+
U = 'u'.freeze
37+
38+
# The limit field constant.
39+
#
40+
# @since 2.1.0
41+
LIMIT = 'limit'.freeze
42+
43+
# The multi field constant.
44+
#
45+
# @since 2.1.0
46+
MULTI = 'multi'.freeze
47+
48+
# The upsert field constant.
49+
#
50+
# @since 2.1.0
51+
UPSERT = 'upsert'.freeze
52+
end
53+
end

lib/mongo/operation/write/bulk/delete.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ def execute_write_command(context)
6060

6161
def messages
6262
deletes.collect do |del|
63-
opts = ( del[:limit] || 0 ) <= 0 ? {} : { :flags => [ :single_remove ] }
64-
Protocol::Delete.new(db_name, coll_name, del[:q], opts)
63+
opts = ( del[Operation::LIMIT] || 0 ) <= 0 ? {} : { :flags => [ :single_remove ] }
64+
Protocol::Delete.new(db_name, coll_name, del[Operation::Q], opts)
6565
end
6666
end
6767
end

lib/mongo/operation/write/bulk/update.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ def execute_write_command(context)
6969
def messages
7070
updates.collect do |u|
7171
opts = { :flags => [] }
72-
opts[:flags] << :multi_update if !!u[:multi]
73-
opts[:flags] << :upsert if !!u[:upsert]
74-
Protocol::Update.new(db_name, coll_name, u[:q], u[:u], opts)
72+
opts[:flags] << :multi_update if !!u[Operation::MULTI]
73+
opts[:flags] << :upsert if !!u[Operation::UPSERT]
74+
Protocol::Update.new(db_name, coll_name, u[Operation::Q], u[Operation::U], opts)
7575
end
7676
end
7777
end

lib/mongo/operation/write/delete.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ def write_command_op
6161
end
6262

6363
def message
64-
selector = delete[:q]
65-
opts = (delete[:limit] || 0) <= 0 ? {} : { :flags => [ :single_remove ] }
64+
selector = delete[Operation::Q]
65+
opts = (delete[Operation::LIMIT] || 0) <= 0 ? {} : { :flags => [ :single_remove ] }
6666
Protocol::Delete.new(db_name, coll_name, selector, opts)
6767
end
6868
end

lib/mongo/operation/write/update.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,15 @@ def write_command_op
6565

6666
def message
6767
flags = []
68-
flags << :multi_update if update[:multi]
69-
flags << :upsert if update[:upsert]
70-
Protocol::Update.new(db_name, coll_name, update[:q], update[:u],
71-
flags.empty? ? {} : { flags: flags })
68+
flags << :multi_update if update[Operation::MULTI]
69+
flags << :upsert if update[Operation::UPSERT]
70+
Protocol::Update.new(
71+
db_name,
72+
coll_name,
73+
update[Operation::Q],
74+
update[Operation::U],
75+
flags.empty? ? {} : { flags: flags }
76+
)
7277
end
7378
end
7479
end

lib/mongo/protocol/query.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,11 @@ def command?
262262
end
263263

264264
def op_command
265-
BSON::Document.new(filter)
265+
document = BSON::Document.new
266+
filter.each do |field, value|
267+
document.store(field.to_s, value)
268+
end
269+
document
266270
end
267271

268272
def find_command

spec/mongo/bulk_write/ordered_combiner_spec.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
[
2525
{
2626
delete_one: [
27-
{ q: { _id: 0 }, limit: 1 },
28-
{ q: { _id: 1 }, limit: 1 }
27+
{ 'q' => { _id: 0 }, 'limit' => 1 },
28+
{ 'q' => { _id: 1 }, 'limit' => 1 }
2929
]
3030
}
3131
]
@@ -66,8 +66,8 @@
6666
[
6767
{
6868
delete_many: [
69-
{ q: { _id: 0 }, limit: 0 },
70-
{ q: { _id: 1 }, limit: 0 }
69+
{ 'q' => { _id: 0 }, 'limit' => 0 },
70+
{ 'q' => { _id: 1 }, 'limit' => 0 }
7171
]
7272
}
7373
]
@@ -137,8 +137,8 @@
137137
[
138138
{
139139
replace_one: [
140-
{ q: { _id: 0 }, u: { name: 'test' }, multi: false, upsert: false },
141-
{ q: { _id: 1 }, u: { name: 'test' }, multi: false, upsert: false }
140+
{ 'q' => { _id: 0 }, 'u' => { name: 'test' }, 'multi' => false, 'upsert' => false },
141+
{ 'q' => { _id: 1 }, 'u' => { name: 'test' }, 'multi' => false, 'upsert' => false }
142142
]
143143
}
144144
]
@@ -179,8 +179,8 @@
179179
[
180180
{
181181
update_one: [
182-
{ q: { _id: 0 }, u: { '$set' => { name: 'test' }}, multi: false, upsert: false },
183-
{ q: { _id: 1 }, u: { '$set' => { name: 'test' }}, multi: false, upsert: false }
182+
{ 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false },
183+
{ 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false }
184184
]
185185
}
186186
]
@@ -221,8 +221,8 @@
221221
[
222222
{
223223
update_many: [
224-
{ q: { _id: 0 }, u: { '$set' => { name: 'test' }}, multi: true, upsert: false },
225-
{ q: { _id: 1 }, u: { '$set' => { name: 'test' }}, multi: true, upsert: false }
224+
{ 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false },
225+
{ 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false }
226226
]
227227
}
228228
]
@@ -261,7 +261,7 @@
261261
expect(combiner.combine).to eq(
262262
[
263263
{ insert_one: [{ _id: 0 }]},
264-
{ delete_one: [{ q: { _id: 0 }, limit: 1 }]},
264+
{ delete_one: [{ 'q' => { _id: 0 }, 'limit' => 1 }]},
265265
{ insert_one: [{ _id: 1 }]}
266266
]
267267
)

spec/mongo/bulk_write/unordered_combiner_spec.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
[
2525
{
2626
delete_one: [
27-
{ q: { _id: 0 }, limit: 1 },
28-
{ q: { _id: 1 }, limit: 1 }
27+
{ 'q' => { _id: 0 }, 'limit' => 1 },
28+
{ 'q' => { _id: 1 }, 'limit' => 1 }
2929
]
3030
}
3131
]
@@ -66,8 +66,8 @@
6666
[
6767
{
6868
delete_many: [
69-
{ q: { _id: 0 }, limit: 0 },
70-
{ q: { _id: 1 }, limit: 0 }
69+
{ 'q' => { _id: 0 }, 'limit' => 0 },
70+
{ 'q' => { _id: 1 }, 'limit' => 0 }
7171
]
7272
}
7373
]
@@ -137,8 +137,8 @@
137137
[
138138
{
139139
update_one: [
140-
{ q: { _id: 0 }, u: { '$set' => { name: 'test' }}, multi: false, upsert: false },
141-
{ q: { _id: 1 }, u: { '$set' => { name: 'test' }}, multi: false, upsert: false }
140+
{ 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false },
141+
{ 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false }
142142
]
143143
}
144144
]
@@ -179,8 +179,8 @@
179179
[
180180
{
181181
update_many: [
182-
{ q: { _id: 0 }, u: { '$set' => { name: 'test' }}, multi: true, upsert: false },
183-
{ q: { _id: 1 }, u: { '$set' => { name: 'test' }}, multi: true, upsert: false }
182+
{ 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false },
183+
{ 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false }
184184
]
185185
}
186186
]
@@ -227,8 +227,8 @@
227227
},
228228
{
229229
delete_one: [
230-
{ q: { _id: 0 }, limit: 1 },
231-
{ q: { _id: 1 }, limit: 1 }
230+
{ 'q' => { _id: 0 }, 'limit' => 1 },
231+
{ 'q' => { _id: 1 }, 'limit' => 1 }
232232
]
233233
}
234234
]

0 commit comments

Comments
 (0)