モジュール: Mongo::Retryable

次による拡張機能。
転送可能
次のドキュメントに含まれます。
クラスター::CursorReaper コレクション コレクション::View::Aggregation::動作 コレクション:View::changeStream コレクション:View::MapReduce カーソル 、 データベース データベース::View Index::View 、SearchIndex: : ビュー 、 Server::Connection 、セッション
定義:
lib/mongo/retryable.rb
lib/mongo/retryable/base_worker.rb、
lib/mongo/retryable/read_worker.rb、
lib/mongo/retryable/backpression.rb、
lib/mongo/retryable/retry_olicy.rb、
lib/mongo/retryable/write_worker.rb

Overview

操作の再試行に関する基本的な動作を定義します。

以来

  • 2.1.0

名前空間で定義済み

Modules: バックプレッシャー クラス: baseServerReadServerRetryPolicyWriteServer

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

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

# read_worker =オブジェクト

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

注:

これは公開メソッドのみであるため、テストはそれに基づいて期待を追加できます。

再試行可能な読み取りを処理するための読み取りワーカーを返します。

以来

  • 2.1.0



86
87
88
ファイル 'lib/mongo/retryable.rb' 行 86

デフォルト read_worker
  @read_worker ||= ReadWORKer.新着情報(自己)
end

# select_server(クラスター、server_selector、セッション、failed_server = nil、error: nil、タイムアウト: nil)⇒ Mongo::Server

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

これは、再試行中にテスト スイートが再試行中にサーバー選択が実行されたことをアサートできるようにする別の メソッドです。

これはパブリック メソッドであるため、必要に応じて読み取りおよび書込みワーカーの委任を介してアクセスできます。

次の値を返します。

  • Mongo::Server

    サーバー設定 に一致するサーバー。

以来

  • 2.1.0



49
50
51
52
53
54
55
56
57
58
59
60
61
62
ファイル 'lib/mongo/retryable.rb' 行 49

デフォルト [select_server](クラスター, server_selector, セッション, faild_server = nil, エラー: nil, timeout: nil)
  非優先 = 場合 faild_server & & reduce_server?(クラスター, エラー)
                    [ faild_server ]
                  else
                    []
                  end
  server_selector.[select_server](
    クラスター,
    nil,
    セッション,
    非優先: 非優先,
    timeout: タイムアウト
  )
end

# with_overload_retry(context: nil、retry_enabled: true) ⇒ オブジェクト

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

操作をオーバーロード再試行ロジックでラップします。過負荷エラー(システムオーバーロードエラー+RetryableError)の場合、 は MAX_RETRIES 回まで、指数バックオフでブロックを再試行します。

ブロックにはサーバー選択が含まれている必要があるため、再試行時に再度実行されます。カーソル操作(getMore)では、カーソルが固定されているため、同じサーバーが再利用されます。

パラメーター:

  • context 操作::Context | nil (デフォルトはnil

    COT 期限チェックの操作コンテキスト。

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

    過負荷再試行が許可されるかどうか。false の場合、再試行せずに過負荷エラーがすぐに発生します(retryReads/retryWrites が無効になっている場合に使用)。

次の値を返します。

  • オブジェクト

    ブロックの結果。

以来

  • 2.1.0



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
ファイル 'lib/mongo/retryable.rb' 行 117

デフォルト with_overload_retry(context: nil, retry_enabled: true)
  return ノードの数 ただし、 retry_enabled

  errors_count = 0
  ループ 行う
    結果 = ノードの数

    return 結果
  ヘルプ エラー::TimeoutError
    発生
  ヘルプ エラー::OperationFailure::ファミリー => e
    発生 e ただし、 e.ラベル('SystemOverloadedError') & & e.ラベル('RetryableError')

    errors_count += 1
    policy = クライアント.retry_ policies
    遅延 = policy.バックオフ_遅延(errors_count)
    発生 e ただし、 policy.Should_retry_overload?(errors_count, 遅延, context: context)

    Logger.logger.WARN(" により過負荷再試行が行われるようになりました: #{e.クラス.名前}: #{e.メッセージ}")
    休止(遅延)
  end
end

#write_worker =オブジェクト

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

注:

これは公開メソッドのみであるため、テストはそれに基づいて期待を追加できます。

再試行可能な書込みを処理するための書込みワーカーを返します。

以来

  • 2.1.0



96
97
98
ファイル 'lib/mongo/retryable.rb' 行 96

デフォルト write_worker
  @write_worker ||= Write Worker.新着情報(自己)
end