クラス: Mongo::Retryable::WriteWorker Private

継承:
base Worker
  • オブジェクト
すべて表示
定義:
build/ruby-Driver-v 2.19 /lib/mongo/retryable/write_worker.rb

Overview

このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。

書込み (write) 操作の再試行に関するロジックを実装します。

以来

  • 2.19.0

インスタンス属性の概要

baseworkerから継承される属性

#retryable

インスタンス メソッドの概要を折りたたむ

base Workerから継承されたメソッド

#initialize

コンストラクターの詳細

このクラスは、 Mongo::Retryable::BaseServerからコンストラクターを継承します。

インスタンス メソッドの詳細

nro_write_with_retry (write_concern, context:){{| connection, txn_num, context| ... } =オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

最新の再試行可能な書込みをサポートしていない操作用の再試行可能な書込みラッパー。

ドライバーが最新の再試行可能な書込みを使用するように構成されている場合、このメソッドは渡されたブロックに一度だけ中断されるため、書込みの再試行は行われません。

ドライバーがレガシー再試行可能な書込みを使用するように構成されている場合、このメソッドは、レガシー ロジックを使用して書込み再試行を実行する legacy_write_with_retry に委任します。

パラメーター:

  • write_concern nil | Hash | WriteConcern::Base

    書込み保証 (write concern) 。

  • context コンテキスト

    操作のコンテキスト。

生成パラメータ:

  • 接続 (接続)

    書込み (write) が送信される接続。

  • txn_num (nil)

    トランザクション番号としての nil 。

  • context 操作::Context

    操作コンテキスト。

以来

  • 2.19.0



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.プライマリ, セッション)
  
  場合 セッション&.クライアント.options[: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) が書込みの再試行をサポートしているかどうかをクエリします。

パラメーター:

  • セッション Mongo::Session

    操作が実行されるセッション。

  • write_concern nil | Hash | WriteConcern::Base

    書込み保証 (write concern) 。

次の値を返します。

  • true | false

    書込み (write) 再試行が許可されているかどうか。

以来

  • 2.19.0



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 が発生することに注意してください。

例:

書込み (write) を実行します。

write_with_retry do
  ...
end

パラメーター:

  • write_concern nil | Hash | WriteConcern::Base

    書込み保証 (write concern) 。

  • end_transaction true | false (デフォルトはfalse

    書込み操作が abortTransaction または commitTransaction の場合は true、それ以外の場合は false です。

  • context コンテキスト

    操作のコンテキスト。

  • ブロック Proc

    実行するブロック。

生成パラメータ:

  • 接続 (接続)

    書込み (write) が送信される接続。

  • txn_num (整数)

    トランザクション番号(ACID の種類ではありません)。

  • context 操作::Context

    操作コンテキスト。

次の値を返します。

  • 結果

    操作の結果。

以来

  • 2.1.0



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