Module: Mongo::Error::OperationFailure::Family
- Extended by:
- Forwardable
- Includes:
- ReadWriteRetryable, SdamErrorDetection
- Included in:
- Mongo::Error::OperationFailure, ServerTimeoutError
- Defined in:
- lib/mongo/error/operation_failure.rb
Overview
Implements the behavior for an OperationFailure error. Other errors (e.g. ServerTimeoutError) may also implement this, so that they may be recognized and treated as OperationFailure errors.
Constant Summary collapse
- CHANGE_STREAM_RESUME_ERRORS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Error codes and code names that should result in a failing getMore command on a change stream NOT being resumed.
[ { code_name: 'HostUnreachable', code: 6 }, { code_name: 'HostNotFound', code: 7 }, { code_name: 'NetworkTimeout', code: 89 }, { code_name: 'ShutdownInProgress', code: 91 }, { code_name: 'PrimarySteppedDown', code: 189 }, { code_name: 'ExceededTimeLimit', code: 262 }, { code_name: 'SocketException', code: 9001 }, { code_name: 'NotMaster', code: 10_107 }, { code_name: 'InterruptedAtShutdown', code: 11_600 }, { code_name: 'InterruptedDueToReplStateChange', code: 11_602 }, { code_name: 'NotPrimaryNoSecondaryOk', code: 13_435 }, { code_name: 'NotMasterOrSecondary', code: 13_436 }, { code_name: 'StaleShardVersion', code: 63 }, { code_name: 'FailedToSatisfyReadPreference', code: 133 }, { code_name: 'StaleEpoch', code: 150 }, { code_name: 'RetryChangeStream', code: 234 }, { code_name: 'StaleConfig', code: 13_388 }, ].freeze
- CHANGE_STREAM_RESUME_MESSAGES =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Change stream can be resumed when these error messages are encountered.
ReadWriteRetryable::WRITE_RETRY_MESSAGES
Constants included from ReadWriteRetryable
ReadWriteRetryable::RETRY_MESSAGES, ReadWriteRetryable::WRITE_RETRY_ERRORS, ReadWriteRetryable::WRITE_RETRY_MESSAGES
Constants included from SdamErrorDetection
SdamErrorDetection::NODE_RECOVERING_CODES, SdamErrorDetection::NODE_SHUTTING_DOWN_CODES, SdamErrorDetection::NOT_MASTER_CODES
Instance Attribute Summary collapse
-
#code ⇒ Integer
readonly
The error code parsed from the document.
-
#code_name ⇒ String
readonly
The error code name parsed from the document.
-
#details ⇒ String | nil
readonly
The details of the error.
-
#document ⇒ BSON::Document | nil
readonly
The server-returned error document.
-
#result ⇒ Operation::Result
readonly
private
The result object for the operation.
-
#server_address ⇒ String | nil
readonly
The address (“host:port”) of the server that produced this error, if known.
-
#server_message ⇒ String
readonly
The server-returned error message parsed from the response.
-
#write_concern_error_code ⇒ Integer | nil
readonly
The error code for the write concern error, if a write concern error is present and has a code.
-
#write_concern_error_code_name ⇒ String | nil
readonly
The code name for the write concern error, if a write concern error is present and has a code name.
-
#write_concern_error_document ⇒ Hash | nil
readonly
Returns the write concern error document as it was reported by the server, if any.
Instance Method Summary collapse
-
#change_stream_resumable? ⇒ true, false
Can the change stream on which this error occurred be resumed, provided the operation that triggered this error was a getMore?.
-
#connection_description ⇒ Server::Description
private
Server description of the server that the operation that this exception refers to was performed on.
-
#initialize(message = nil, result = nil, options = {}) ⇒ Object
Create the operation failure.
-
#max_time_ms_expired? ⇒ true | false
Whether the error is MaxTimeMSExpired.
-
#write_concern_error? ⇒ true | false
Whether the failure includes a write concern error.
-
#wtimeout? ⇒ true | false
Whether the error is a write concern timeout.
Methods included from ReadWriteRetryable
#retryable?, #write_retryable?
Methods included from SdamErrorDetection
#node_recovering?, #node_shutting_down?, #not_master?
Instance Attribute Details
#code ⇒ Integer (readonly)
Returns The error code parsed from the document.
43 44 45 |
# File 'lib/mongo/error/operation_failure.rb', line 43 def code @code end |
#code_name ⇒ String (readonly)
Returns The error code name parsed from the document.
48 49 50 |
# File 'lib/mongo/error/operation_failure.rb', line 48 def code_name @code_name end |
#details ⇒ String | nil (readonly)
155 156 157 |
# File 'lib/mongo/error/operation_failure.rb', line 155 def details @details end |
#document ⇒ BSON::Document | nil (readonly)
Returns The server-returned error document.
160 161 162 |
# File 'lib/mongo/error/operation_failure.rb', line 160 def document @document end |
#result ⇒ Operation::Result (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the result object for the operation.
165 166 167 |
# File 'lib/mongo/error/operation_failure.rb', line 165 def result @result end |
#server_address ⇒ String | nil (readonly)
Returns The address (“host:port”) of the server that produced this error, if known.
58 59 60 |
# File 'lib/mongo/error/operation_failure.rb', line 58 def server_address @server_address end |
#server_message ⇒ String (readonly)
Returns The server-returned error message parsed from the response.
54 55 56 |
# File 'lib/mongo/error/operation_failure.rb', line 54 def @server_message end |
#write_concern_error_code ⇒ Integer | nil (readonly)
Returns The error code for the write concern error, if a write concern error is present and has a code.
143 144 145 |
# File 'lib/mongo/error/operation_failure.rb', line 143 def write_concern_error_code @write_concern_error_code end |
#write_concern_error_code_name ⇒ String | nil (readonly)
Returns The code name for the write concern error, if a write concern error is present and has a code name.
149 150 151 |
# File 'lib/mongo/error/operation_failure.rb', line 149 def write_concern_error_code_name @write_concern_error_code_name end |
#write_concern_error_document ⇒ Hash | nil (readonly)
Returns the write concern error document as it was reported by the server, if any.
137 138 139 |
# File 'lib/mongo/error/operation_failure.rb', line 137 def write_concern_error_document @write_concern_error_document end |
Instance Method Details
#change_stream_resumable? ⇒ true, false
Can the change stream on which this error occurred be resumed, provided the operation that triggered this error was a getMore?
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/mongo/error/operation_failure.rb', line 100 def change_stream_resumable? if @result && @result.is_a?(Mongo::Operation::GetMore::Result) # CursorNotFound exceptions are always resumable because the server # is not aware of the cursor id, and thus cannot determine if # the cursor is a change stream and cannot add the # ResumableChangeStreamError label. return true if code == 43 # Connection description is not populated for unacknowledged writes. if connection_description.max_wire_version >= 9 label?('ResumableChangeStreamError') else change_stream_resumable_code? end else false end end |
#connection_description ⇒ Server::Description
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns Server description of the server that the operation that this exception refers to was performed on.
38 |
# File 'lib/mongo/error/operation_failure.rb', line 38 def_delegator :@result, :connection_description |
#initialize(message = nil, result = nil, options = {}) ⇒ Object
Create the operation failure.
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/mongo/error/operation_failure.rb', line 192 def initialize( = nil, result = nil, = {}) @details = retrieve_details([:document]) @server_address = normalize_server_address([:server_address]) super(append_server_address(append_details(, @details))) @result = result @code = [:code] @code_name = [:code_name] @write_concern_error_document = [:write_concern_error_document] @write_concern_error_code = [:write_concern_error_code] @write_concern_error_code_name = [:write_concern_error_code_name] @write_concern_error_labels = [:write_concern_error_labels] || [] @labels = [:labels] || [] @wtimeout = !![:wtimeout] @document = [:document] @server_message = [:server_message] end |
#max_time_ms_expired? ⇒ true | false
Whether the error is MaxTimeMSExpired.
224 225 226 |
# File 'lib/mongo/error/operation_failure.rb', line 224 def max_time_ms_expired? code == 50 # MaxTimeMSExpired end |
#write_concern_error? ⇒ true | false
Returns Whether the failure includes a write concern error. A failure may have a top level error and a write concern error or either one of the two.
129 130 131 |
# File 'lib/mongo/error/operation_failure.rb', line 129 def write_concern_error? !!@write_concern_error_document end |
#wtimeout? ⇒ true | false
Whether the error is a write concern timeout.
215 216 217 |
# File 'lib/mongo/error/operation_failure.rb', line 215 def wtimeout? @wtimeout end |