Skip to content

Commit a051a2a

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 b731dbf commit a051a2a

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
@@ -89,7 +89,8 @@ class OperationFailure < Error
8989
# @since 2.1.1
9090
# @deprecated
9191
def retryable?
92-
write_retryable? || RETRY_MESSAGES.any?{ |m| message.include?(m) }
92+
write_retryable? ||
93+
code.nil? && RETRY_MESSAGES.any?{ |m| message.include?(m) }
9394
end
9495

9596
# Whether the error is a retryable error according to the modern retryable
@@ -102,19 +103,18 @@ def retryable?
102103
#
103104
# @since 2.4.2
104105
def write_retryable?
105-
WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) } ||
106-
write_retryable_code?
106+
write_retryable_code? ||
107+
code.nil? && WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) }
107108
end
108109

109-
def write_retryable_code?
110+
private def write_retryable_code?
110111
if code
111112
WRITE_RETRY_ERRORS.any? { |e| e[:code] == code }
112113
else
113114
# return false rather than nil
114115
false
115116
end
116117
end
117-
private :write_retryable_code?
118118

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

0 commit comments

Comments
 (0)