Skip to content

Commit 1c722e6

Browse files
3390
1 parent f9093e6 commit 1c722e6

File tree

6 files changed

+59
-21
lines changed

6 files changed

+59
-21
lines changed

lib/mongo/collection/view/iterable.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def select_cursor(session)
9999
Cursor.new(view, result, server, session: session, context: context)
100100
end
101101
else
102-
read_with_retry_cursor(session, server_selector, view) do |server|
102+
read_with_retry_cursor(session, server_selector, view, context: context) do |server|
103103
send_initial_query(server, context)
104104
end
105105
end

lib/mongo/collection/view/readable.rb

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def count(opts = {})
187187
session: session,
188188
operation_timeouts: operation_timeouts(opts)
189189
)
190-
read_with_retry(session, selector) do |server|
190+
read_with_retry(session, selector, context) do |server|
191191
Operation::Count.new(
192192
selector: cmd,
193193
db_name: database.name,
@@ -237,7 +237,7 @@ def count_documents(opts = {})
237237
pipeline << { :'$limit' => opts[:limit] } if opts[:limit]
238238
pipeline << { :'$group' => { _id: 1, n: { :'$sum' => 1 } } }
239239

240-
opts = opts.slice(:hint, :max_time_ms, :read, :collation, :session, :comment)
240+
opts = opts.slice(:hint, :max_time_ms, :read, :collation, :session, :comment, :timeout_ms)
241241
opts[:collation] ||= collation
242242

243243
first = aggregate(pipeline, opts).first
@@ -279,12 +279,12 @@ def estimated_document_count(opts = {})
279279
read_pref = opts[:read] || read_preference
280280
selector = ServerSelector.get(read_pref || server_selector)
281281
with_session(opts) do |session|
282-
read_with_retry(session, selector) do |server|
283-
context = Operation::Context.new(
284-
client: client,
285-
session: session,
286-
operation_timeouts: operation_timeouts(opts)
287-
)
282+
context = Operation::Context.new(
283+
client: client,
284+
session: session,
285+
operation_timeouts: operation_timeouts(opts)
286+
)
287+
read_with_retry(session, selector, context) do |server|
288288
cmd = { count: collection.name }
289289
cmd[:maxTimeMS] = opts[:max_time_ms] if opts[:max_time_ms]
290290
if read_concern
@@ -347,7 +347,12 @@ def distinct(field_name, opts = {})
347347
read_pref = opts[:read] || read_preference
348348
selector = ServerSelector.get(read_pref || server_selector)
349349
with_session(opts) do |session|
350-
read_with_retry(session, selector) do |server|
350+
context = Operation::Context.new(
351+
client: client,
352+
session: session,
353+
operation_timeouts: operation_timeouts(opts)
354+
)
355+
read_with_retry(session, selector, context) do |server|
351356
Operation::Distinct.new(
352357
selector: cmd,
353358
db_name: database.name,
@@ -360,11 +365,7 @@ def distinct(field_name, opts = {})
360365
collation: opts[:collation] || opts['collation'] || collation,
361366
).execute(
362367
server,
363-
context: Operation::Context.new(
364-
client: client,
365-
session: session,
366-
operation_timeouts: operation_timeouts(opts)
367-
)
368+
context: context
368369
)
369370
end.first['values']
370371
end

lib/mongo/index/view.rb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,15 @@ def get(keys_or_name)
273273
#
274274
# @since 2.0.0
275275
def each(&block)
276-
session = client.send(:get_session, @options)
277-
cursor = read_with_retry_cursor(session, ServerSelector.primary, self) do |server|
278-
send_initial_query(server, session)
276+
session = client.get_session(@options)
277+
context = Operation::Context.new(
278+
client: client,
279+
session: session,
280+
operation_timeouts: operation_timeouts(@options)
281+
)
282+
283+
cursor = read_with_retry_cursor(session, ServerSelector.primary, self, context: context) do |server|
284+
send_initial_query(server, session, context)
279285
end
280286
if block_given?
281287
cursor.each do |doc|
@@ -386,8 +392,8 @@ def normalize_models(models, server)
386392
end
387393
end
388394

389-
def send_initial_query(server, session)
390-
initial_query_op(session).execute(server, context: Operation::Context.new(client: client, session: session))
395+
def send_initial_query(server, session, context)
396+
initial_query_op(session).execute(server, context: context)
391397
end
392398
end
393399
end

lib/mongo/operation/find/op_msg.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ def apply_find_timeouts_to(spec, timeout_ms)
7171
end
7272
end
7373

74-
spec
74+
spec.tap do |spc|
75+
spc.delete(:maxTimeMS) if spc[:maxTimeMS].nil?
76+
end
7577
end
7678

7779
def selector(connection)

spec/runners/unified/crud_operations.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,23 @@ def get_find_view(op)
4747
end
4848
end
4949

50+
def count(op)
51+
collection = entities.get(:collection, op.use!('object'))
52+
use_arguments(op) do |args|
53+
opts = {}
54+
if session = args.use('session')
55+
opts[:session] = entities.get(:session, session)
56+
end
57+
if comment = args.use('comment')
58+
opts[:comment] = comment
59+
end
60+
if timeout_ms = args.use('timeoutMS')
61+
opts[:timeout_ms] = timeout_ms
62+
end
63+
collection.count(args.use!('filter'), **opts)
64+
end
65+
end
66+
5067
def count_documents(op)
5168
collection = entities.get(:collection, op.use!('object'))
5269
use_arguments(op) do |args|
@@ -57,6 +74,9 @@ def count_documents(op)
5774
if comment = args.use('comment')
5875
opts[:comment] = comment
5976
end
77+
if timeout_ms = args.use('timeoutMS')
78+
opts[:timeout_ms] = timeout_ms
79+
end
6080
collection.find(args.use!('filter')).count_documents(**opts)
6181
end
6282
end
@@ -71,6 +91,9 @@ def estimated_document_count(op)
7191
if comment = args.use('comment')
7292
opts[:comment] = comment
7393
end
94+
if timeout_ms = args.use('timeoutMS')
95+
opts[:timeout_ms] = timeout_ms
96+
end
7497
collection.estimated_document_count(**opts)
7598
end
7699
end
@@ -85,6 +108,9 @@ def distinct(op)
85108
if comment = args.use('comment')
86109
opts[:comment] = comment
87110
end
111+
if timeout_ms = args.use('timeoutMS')
112+
opts[:timeout_ms] = timeout_ms
113+
end
88114
req = collection.find(args.use!('filter'), **opts).distinct(args.use!('fieldName'), **opts)
89115
result = req.to_a
90116
end

spec/runners/unified/ddl_operations.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ def list_indexes(op)
137137
if session = args.use('session')
138138
opts[:session] = entities.get(:session, session)
139139
end
140+
if timeout_ms = args.use('timeoutMS')
141+
opts[:timeout_ms] = timeout_ms
142+
end
140143
collection.indexes(**opts).to_a
141144
end
142145
end

0 commit comments

Comments
 (0)