クラス: Mongo::Server::MongoDB Private

継承:
オブジェクト
  • オブジェクト
すべて表示
次による拡張機能。
転送可能
次のことが含まれます。
バックグラウンドスレッド 、イベント::Publisherログ可能
定義:
lib/mongo/サーバー/monitor.rb
、lib/mongo/サーバー / monitor/
connection.rb、lib/mongo/サーバー/monitor/app_metadata.rb

Overview

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

サーバーのステータスが最新になるよう、 hello コマンドでサーバーを定期的にポーリングする 必要があります。

ドライバーによって実行される他の操作を中断しないように、すべてがバックグラウンド スレッドで動作します。

以来

  • 2.0.0

名前空間で定義済み

クラス: AppMetadataConnection

定数の概要の削減

DEFAULT_HEARTB_Interval =

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

サーバー ステータスが更新されるデフォルトの間隔は10秒です。

以来

  • 2.0.0

10
MIN_SCAN_InterVAL =

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

強制サーバースキャンの最小時間。 は、SDAM 仕様の minハートビートFrequencyMS です。

以来

  • 2.0.0

0.5
RTT_WEEKS_FACTOR =

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

非推奨。

バージョン3.0で削除されます。

平均の移動ラウンド トリップ時間を計算するための重み係数(アルファベット)。

以来

  • 2.0.0

0.2

Loggableに含まれる定数

ログ可能::PRFIX

インスタンス属性の概要を折りたたむ

Event::Publisherに含まれる属性

#event_listeners

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

バックグラウンドスレッドに含まれるメソッド

# を実行します。は、 を実行しますか。

Loggableに含まれるメソッド

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Event::Publisherに含まれるメソッド

#push

コンストラクターの詳細

#初期化(サーバー、イベント_リスナー、モニタリング、オプション = {}) =モニター

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

注:

モニターは、サーバーの外部で直接インスタンス化されないでください。

新しいサーバー モニターを作成します。

例:

サーバー モニターを作成します。

Mongo::Server::Monitor.new(address, listeners, monitoring)

パラメーター:

  • サーバー サーバー

    監視するサーバー。

  • event_listenners イベント::リスナー

    イベント リスナー。

  • モニタリング 監視

    の監視。

  • options ハッシュ (デフォルトは{}です)

    オプション。

オプション ハッシュ( options ):

  • :connect_timeout 浮動小数

    監視接続を確立するときに使用するタイムアウト(秒単位)。

  • : heartbeat_Interval 浮動小数

    定期的なサーバー チェックの間隔。

  • :logger ロガー

    使用するカスタム ロガー。

  • :monitor_app_metadata Mongo::Server::MongoDB::AppMetadata

    定期的な接続を監視するために使用するメタデータ。

  • :push_monitor_app_metadata Mongo::Server::MongoDB::AppMetadata

    プッシュ モニターの接続に使用するメタデータ。

  • :socket_timeout 浮動小数

    監視接続で操作を実行するためのタイムアウト(秒単位)。

次の値が発生します。

  • (ArgumentError)

以来

  • 2.0.0



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 76

デフォルト 初期化(サーバー, event_listenners, モニタリング, options = {})
  発生 ArgumentError, "モニタリングのタイプが正しくありません: #{ Monitoring . explain } " ただし、 モニタリング.is_a?(モニタリング)
  発生 ArgumentError, アプリ メタデータは必須 です ただし、 options[:app_metadata]
  発生 ArgumentError, 'プッシュ モニター アプリのメタデータ が必要です' ただし、 options[:push_monitor_app_metadata]

  @server = サーバー
  @event_listenners = event_listenners
  @monitoring = モニタリング
  @options = options.freeze
  @mutex = ミューテックス.新着情報
  @sam_Mutex = ミューテックス.新着情報
  @next_earrest_scan = @next_waited_scan = 時間.になりました
  @update_mutex = ミューテックス.新着情報
  # は @ connection の読み取りと書込みを保護します。これにより、ポーリング接続は次のことが可能になります
  別のスレッドからキャンセルされる場合。サーバー監視仕様の
  #CancelCheck 疑似コード。ロックはコピーまたは に十分な時間のみ保持されます。
  参照を割り当てます - ブロッキングチェックでは、絶対に参照を割り当てません。
  @ connection_lock = ミューテックス.新着情報
end

インスタンス属性の詳細

#monitoringMonitoring (readonly)

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

監視 監視を返します。

次の値を返します。

  • 監視

    監視 監視。

以来

  • 2.0.0



127
128
129
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 127

デフォルト モニタリング
  @monitoring
end

オプション=ハッシュ(読み取り専用)

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

サーバー オプションのオプションを返します。

次の値を返します。

  • ハッシュ

    options サーバー オプション。

以来

  • 2.0.0



108
109
110
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 108

デフォルト options
  @options
end

#サーバー=サーバー(読み取り専用)

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

このモニターが監視しているサーバーを返します。

次の値を返します。

  • サーバー

    server このモニターが監視しているサーバー。

以来

  • 2.0.0



98
99
100
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 98

デフォルト サーバー
  @server
end

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

#cancel_check!Object

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

進行中のチェックをキャンセルし、モニタリング接続を閉じます。

サーバー モニタリング 仕様(「hello」または「レガシーhello キャンセル」)に従って、サーバーがネットワーク エラーから 不明 とマークされている場合に呼び出されます。 RustMonitorのストリーミングを停止し(待機する hello 読み取りを中断)、ポーリング接続を閉じます。そのため、次回のチェックでは、デッドになっている可能性のあるソケットでサーバーを再検証するのではなく、新しい を確立する必要があります。

以来

  • 2.0.0



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 210

デフォルト cancel_check!
  stop_push_monitor.

  ロックの下で接続参照をコピーし、中断して閉じます
  ロックの外部でロック を行います。ソケットを閉じると、進行中のすべてが中断されます
  モニター スレッドでの読み取り回数。参照が強制されない場合
  再接続するには # を確認します。モニター スレッドは、新しいドキュメントの唯一の作成者です。
  # 接続をクリアするため、このスレッドは安全に接続をクリアできます。
  接続 = @ connection_lock.同期 行う
    conn = @ connection
    @ connection = nil
    conn
  end
  接続&.切断します。
end

# 接続 = Mongo::Server::MongoDB::Connection | nil

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

使用する接続を @ connection_lock の下で読み込むため、呼び出しは同時キャンセル_チェック後に古い参照を観察しません。は、それをクリアします。

次の値を返します。

  • Mongo::Server::Monitor::Connection | nil

    使用する接続は @ connection_lock の下で読み取られるため、同時キャンセル_チェック後に呼び出し元が古い参照を認識することはありません。は、それをクリアします。

以来

  • 2.0.0



103
104
105
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 103

デフォルト 接続
  @ connection_lock.同期 { @ connection }
end

create_push_monitor を使用します。 (top logical_version, connection) = オブジェクト

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

パラメーター:

  • 接続 Mongo::Server::MongoDB::Connection

    新しく確立されたモニタリング接続。明示的に渡されるため(@ connection からの読み取りではなく)、同時Cancel_check.は、それを確立してから RustMongoDB をビルドするまでの間に、当社の下で実行されることはありません。

以来

  • 2.0.0



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 175

デフォルト create_push_monitor.(topic, 接続)
  @update_mutex.同期 行う
    @push_monitor = nil 場合 @push_monitor & & !@push_monitor.実行中

    @push_monitor ||= RustMongoDB.新着情報(
      自己,
      topic,
      モニタリング,
      **Utils.slow_symbols_keys(options.merge(
                                       socket_timeout: heartbeat_Interval + 接続.socket_timeout,
                                       app_metadata: options[:push_monitor_app_metadata],
                                       checkpoint_document: 接続.checkpoint_document
                                     ))
    )
  end
end

# do_work =オブジェクト

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

サーバーのチェックを実行します。

以来

  • 2.0.0



140
141
142
143
144
145
146
147
148
149
150
151
152
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 140

デフォルト do_work
  スキャンします。
  # @next_waited_scan はプッシュ モニターによって更新される可能性があります。
  # ただし、終了フラグをチェックする必要があるため、モニターは
  要求されると終了します。
  ループ 行う
    デルタ = @next_waited_scan - 時間.になりました
    break ただし、 デルタ > 0

    シグナル送信 = サーバー.scan_smahour.待機する(デルタ)
    break 場合 シグナル送信 || @stop_requested
  end
end

#heartbeat_intervalFloat

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

定期的なサーバー チェックの間隔。

次の値を返します。

  • 浮動小数

    ハートビートの間隔(秒単位)。

以来

  • 2.0.0



113
114
115
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 113

デフォルト heartbeat_Interval
  options[: heartbeat_Interval] || DEFAULT_HEARTB_Interval
end

#push_monitorServer::PushMonitor | nil

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

プッシュ モニターを使用している場合は、その値を返します。

次の値を返します。

  • Server ::PushMonitor | nil

    プッシュ モニター(使用されている場合)。

以来

  • 2.0.0



131
132
133
134
135
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 131

デフォルト push_monitor
  @update_mutex.同期 行う
    @push_monitor
  end
end

#再起動時 スレッド

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

現在のスレッドがアベイラビリティーがない限り、サーバー モニターを再起動します。

例:

モニターを再起動します。

monitor.restart!

次の値を返します。

  • スレッド

    モニターが実行されるスレッド。

以来

  • 2.1.0



308
309
310
311
312
313
314
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 308

デフォルト 再起動します。
  場合 @thread & & @thread.alive?
    @thread
  else
    実行します。
  end
end

# run_sam_flow(result、waited: false、scan_error: nil、rtt_only: false)= オブジェクト

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

以来

  • 2.0.0



268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 268

デフォルト run_sam_flow(結果, 次の操作を待機しました。 false, scan_error: nil, rt_only: false)
  @sam_Mutex.同期 行う
    old_description = サーバー.説明

    #RTT のみの測定(ストリーミングプロトコルがアクティブ)では更新してはなりません
    トポロジーか、SDAM イベントを公開します。収集された RTT は次のとおりです:
    次の経由で次のストリーミングレプリカセットに組み込まれた場合:
    # 共有 RTT 計算機能。以下のスケジュールは引き続き実行されるため、
    # モニターはチェックの間隔を長くします。
    ただし、 rt_only
      new_description = 説明.新着情報(
        サーバー.address,
        結果,
        Average_round_drop_time: サーバー.round_drop_time_calculator.Average_round_drop_time,
        minimum_round_drop_time: サーバー.round_drop_time_calculator.minimum_round_drop_time
      )
      サーバー.クラスター.run_sam_flow(サーバー.説明, new_description, 次の操作を待機しました。 待機しました, scan_error: scan_error)
    end

    サーバー.説明.タップ 行う |new_description|
      ただし、 待機しました
        場合 new_description.不明な場合 & & !old_description.不明な場合
          @next_earrest_scan = @next_waited_scan = 時間.になりました
        else
          @next_earrest_scan = 時間.になりました + MIN_SCAN_Interval
          @next_waited_scan = 時間.になりました + heartbeat_Interval
        end
      end
    end
  end
end

#スキャン詳しくは、説明を参照してください

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

注:

システム クロックが逆方向に移動した場合、このメソッドは非常に長時間休止する可能性があります。

注:

このメソッドの戻り値は非推奨です。 バージョン3.0.0では、このメソッドには戻り値がありません。

スロットリングを使用してサーバーのチェックを実行し、サーバーの説明と平均ラウンド トリップ時間を更新します。

サーバーが MIN_SCAN_InterVAL 秒未満前にチェックされていた場合は、最後のチェックから MIN_SCAN_Interval 秒が経過するまで休止します。 次に、監視対象のサーバーで hello を実行し、その結果サーバーの説明を更新するチェックを実行します。

次の値を返します。

  • 説明

    更新された説明。

以来

  • 2.0.0



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 244

デフォルト スキャンします。
  # 通常、バックグラウンド スレッドはこのメソッドを呼び出します。
  # ただし、スキャンを呼び出すことも可能です。モニターに直接表示。
  # 一度に実行できるスキャンは 1 つだけです。
  @mutex.同期 行う
    throttle_scan_frequency

    ストリーミングプロトコルがアクティブな場合、プッシュ モニターは
    権限のある SDAM ソースを含む で、このスキャンは の RTT のみを測定します
    # 専用接続。サーバー モニタリング 仕様ごとの RTT
    コマンドは イベントを公開したり、トポロジーを更新したり してはなりません 。コンピュート
    do_scan の前にこれが必要です。これにより、(再)接続が行われ、状態が変更される可能性があります。
    rt_only = rtt_measurement_only

    begin
      結果 = do_scan(公開ハートビート: !rt_only)
    ヘルプ 標準エラー => e
      run_sam_flow({}, scan_error: e, rt_only: rt_only)
    else
      run_sam_flow(結果, rt_only: rt_only)
    end
  end
end

#停止します。 = true | false

バックグラウンド スレッドを停止し、十分な時間、終了するまで待ちます。

次の値を返します。

  • true | false

    スレッドが終了されたかどうか。

以来

  • 2.0.0



160
161
162
163
164
165
166
167
168
169
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 160

デフォルト 停止します。
  stop_push_monitor.

  フォワードスーパーの戻り値
  スーパー.タップ 行う
    重要: 切断はバックグラウンド スレッドの後に実行される必要があります
    # は終了します。
    接続&.切断します。
  end
end

# stop_push_monitor を使用します。 =オブジェクト

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

以来

  • 2.0.0



192
193
194
195
196
197
198
199
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 192

デフォルト stop_push_monitor.
  @update_mutex.同期 行う
    場合 @push_monitor
      @push_monitor.停止します。
      @push_monitor = nil
    end
  end
end

# to_s =オブジェクト

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

以来

  • 2.0.0



316
317
318
# ファイル 'lib/mongo/ サーバー/monitor.rb', 行 316

デフォルト to_s
  " # { Security . Class . name } : #{ object_id } #{ サーバー . アドレス } > "
end