クラス: Mongo::Retryable::WriteWorker Private
- 継承:
-
base Worker
- オブジェクト
- base Worker
- Mongo::Retryable::Writeworker
- 定義:
- build/ruby-Driver-v 2.19 /lib/mongo/retryable/write_worker.rb
Overview
このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。
書込み (write) 操作の再試行に関するロジックを実装します。
インスタンス属性の概要
baseworkerから継承される属性
インスタンス メソッドの概要を折りたたむ
-
nro_write_with_retry (write_concern, context:){{| connection, txn_num, context| ... } = オブジェクト
private
最新の再試行可能な書込みをサポートしていない操作用の再試行可能な書込みラッパー。
-
#retry_write_allowed? (セッション、書込み保証(write_concern)=true| false
private
セッションと書込み保証 (write concern) が書込みの再試行をサポートしているかどうかをクエリします。
-
#write_with_retry (write_concern,ending_transaction:false,context:,========================================================================== ... } = 結果
private
渡されたブロックに 1 回以上ロックを解除することで、書き込み再試行機能を実装します。
base Workerから継承されたメソッド
コンストラクターの詳細
このクラスは、 Mongo::Retryable::BaseServerからコンストラクターを継承します。
インスタンス メソッドの詳細
nro_write_with_retry (write_concern, context:){{| connection, txn_num, context| ... } =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
最新の再試行可能な書込みをサポートしていない操作用の再試行可能な書込みラッパー。
ドライバーが最新の再試行可能な書込みを使用するように構成されている場合、このメソッドは渡されたブロックに一度だけ中断されるため、書込みの再試行は行われません。
ドライバーがレガシー再試行可能な書込みを使用するように構成されている場合、このメソッドは、レガシー ロジックを使用して書込み再試行を実行する legacy_write_with_retry に委任します。
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/retryable/write_worker.rb', 行103 デフォルト nro_write_with_retry(write_concern, context:, &ブロック) セッション = context.セッション サーバー = [select_server](クラスター, ServerSelector.プライマリ, セッション) 場合 セッション&.クライアント.[:retry_writes] begin サーバー.with_ connection(connection_ global_id: context.connection_ global_id) 行う |接続| ノードの数 接続, nil, context end ヘルプ *retryable_exceptions, エラー::PoolError, エラー::OperationFailure => e e.add_note(無効にされた を 再試行し ます) 発生 e end else legacy_write_with_retry(サーバー, context: context, &ブロック) end end |
#retry_write_allowed? (セッション、書込み保証(write_concern)= true| false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
セッションと書込み保証 (write concern) が書込みの再試行をサポートしているかどうかをクエリします。
129 130 131 132 133 134 135 136 137 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/retryable/write_worker.rb', 行129 デフォルト retry_write_allowed?(セッション, write_concern) return false ただし、 セッション&.retry_writes? 場合 write_concern.nil? true else WriteConcern.得る(write_concern).確認済み? end end |
#write_with_retry (write_concern,ending_transaction:false,context:,========================================================================== ... } =結果
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
これは部分的な書込みがまだ発生していないことを確認できる唯一のケースであるため、これはマスター以外の障害に対してのみ操作を再試行します。
渡されたブロックに 1 回以上ロックを解除することで、書き込み再試行機能を実装します。
セッションが提供され(つまり配置はセッションをサポートする)、クライアントで最新の再試行書込みが有効になっている場合、最新の再試行ロジックが呼び出されます。 それ以外の場合は、レガシー再試行ロジックが呼び出されます。
ending_transaction パラメータが true の場合、トランザクションがコミットまたは中止されることを示し、操作は 1 回だけ実行されます。 トランザクションにはセッションが必要なため、 end_transaction が true でセッションが nil の場合、このメソッドでは ArgmentError が発生することに注意してください。
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/retryable/write_worker.rb', 行65 デフォルト write_with_retry(write_concern, termination_transaction: false, context:, &ブロック) セッション = context.セッション concern_valid_rate(end_transaction, セッション) ただし、 end_transaction || retry_write_allowed?(セッション, write_concern) return legacy_write_with_retry(nil, context: context, &ブロック) end # ここでは、セッションは nil ではありません。 セッションが nil の場合 失敗した retry_write_allowed?チェックしてください。 サーバー = [select_server](クラスター, ServerSelector.プライマリ, セッション) ただし、 end_transaction || サーバー.retry_writes? return legacy_write_with_retry(サーバー, context: context, &ブロック) end latest_write_with_retry(セッション, サーバー, context, &ブロック) end |