Skip to content

Commit 04dae97

Browse files
p-mongop
andcommitted
RUBY-2355 Use server error codes in place of error messages when possible (#2064)
Co-authored-by: Oleg Pudeyev <oleg@bsdpower.com>
1 parent 56aa480 commit 04dae97

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

lib/mongo/collection.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,12 @@ def drop(opts = {})
278278
}).execute(next_primary(nil, session), client: client)
279279
end
280280
rescue Error::OperationFailure => ex
281-
raise ex unless ex.message =~ /ns not found/
282-
false
281+
# NamespaceNotFound
282+
if ex.code == 26 || ex.code.nil? && ex.message =~ /ns not found/
283+
false
284+
else
285+
raise
286+
end
283287
end
284288

285289
# Find documents in the collection.

lib/mongo/error/operation_failure.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ class OperationFailure < Error
9797
# @since 2.1.1
9898
# @deprecated
9999
def retryable?
100-
write_retryable? || RETRY_MESSAGES.any?{ |m| message.include?(m) }
100+
write_retryable? ||
101+
code.nil? && RETRY_MESSAGES.any?{ |m| message.include?(m) }
101102
end
102103

103104
# Whether the error is a retryable error according to the modern retryable
@@ -110,19 +111,18 @@ def retryable?
110111
#
111112
# @since 2.4.2
112113
def write_retryable?
113-
WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) } ||
114-
write_retryable_code?
114+
write_retryable_code? ||
115+
code.nil? && WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) }
115116
end
116117

117-
def write_retryable_code?
118+
private def write_retryable_code?
118119
if code
119120
WRITE_RETRY_ERRORS.any? { |e| e[:code] == code }
120121
else
121122
# return false rather than nil
122123
false
123124
end
124125
end
125-
private :write_retryable_code?
126126

127127
# Error codes and code names that should result in a failing getMore
128128
# command on a change stream NOT being resumed.

0 commit comments

Comments
 (0)