class Mongo::Error::OperationFailure
Raised when an operation fails for some reason.
@since 2.0.0
Constants
- CHANGE_STREAM_NOT_RESUME_ERRORS
Error
codes and code names that should result in a failing getMore command on a change stream NOT being resumed.@since 2.6.0 @api private
- CHANGE_STREAM_RESUME_MESSAGES
Change stream can be resumed when these error messages are encountered.
@since 2.6.0 @api private
- RETRY_MESSAGES
These are magic error messages that could indicate a cluster reconfiguration behind a mongos.
@since 2.1.1 @api private
- WRITE_RETRY_ERRORS
Error
codes and code names that should result in a failing write being retried.@since 2.6.0 @api private
- WRITE_RETRY_MESSAGES
These are magic error messages that could indicate a master change.
@since 2.4.2 @api private
Attributes
@return [ Integer ] code The error code parsed from the document. @since 2.6.0
@return [ String ] code_name
The error code name parsed from the document. @since 2.6.0
Public Class Methods
Create the operation failure.
@example Create the error object
OperationFailure.new(message, result)
@example Create the error object with a code and a code name
OperationFailure.new(message, result, :code => code, :code_name => code_name)
@param [ String ] message The error message. @param [ Operation::Result
] result The result object. @param [ Hash ] options Additional parameters
@option options [ Integer ] :code Error
code @option options [ String ] :code_name Error
code name @option options [ Array<String> ] :labels The set of labels associated
with the error
@option options [ true | false ] :wtimeout Whether the error is a wtimeout
@since 2.5.0, options added in 2.6.0
Mongo::Error::new
# File lib/mongo/error/operation_failure.rb, line 184 def initialize(message = nil, result = nil, options = {}) @result = result @code = options[:code] @code_name = options[:code_name] @labels = options[:labels] @wtimeout = !!options[:wtimeout] super(message) end
Public Instance Methods
Can the change stream on which this error occurred be resumed, provided the operation that triggered this error was a getMore?
@example Is the error resumable for the change stream?
error.change_stream_resumable?
@return [ true, false ] Whether the error is resumable.
@since 2.6.0
# File lib/mongo/error/operation_failure.rb, line 142 def change_stream_resumable? if @result && @result.is_a?(Mongo::Operation::GetMore::Result) change_stream_resumable_message? || change_stream_resumable_code? else false end end
Whether the error is a retryable error according to the legacy read retry logic.
@return [ true, false ]
@since 2.1.1 @deprecated
# File lib/mongo/error/operation_failure.rb, line 88 def retryable? RETRY_MESSAGES.any?{ |m| message.include?(m) } end
Whether the error is a retryable error according to the modern retryable reads and retryable writes specifications.
This method is also used by the legacy retryable write logic to determine whether an error is a retryable one.
@return [ true, false ]
@since 2.4.2
# File lib/mongo/error/operation_failure.rb, line 101 def write_retryable? WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) } || write_retryable_code? end
Whether the error is a write concern timeout.
@return [ true | false ] Whether the error is a write concern timeout.
@since 2.7.1
# File lib/mongo/error/operation_failure.rb, line 198 def wtimeout? @wtimeout end
Private Instance Methods
# File lib/mongo/error/operation_failure.rb, line 156 def change_stream_resumable_code? if code !CHANGE_STREAM_NOT_RESUME_ERRORS.any? { |e| e[:code] == code } else true end end
# File lib/mongo/error/operation_failure.rb, line 151 def change_stream_resumable_message? CHANGE_STREAM_RESUME_MESSAGES.any? { |m| message.include?(m) } end
# File lib/mongo/error/operation_failure.rb, line 106 def write_retryable_code? if code WRITE_RETRY_ERRORS.any? { |e| e[:code] == code } else # return false rather than nil false end end