クラス: Mongo::Server::PushMonitor Private

継承:
オブジェクト
  • オブジェクト
すべて表示
次による拡張機能。
転送可能
次のことが含まれます。
バックグラウンドスレッド
定義:
build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb
build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor/ connection.rb

Overview

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

サーバープッシュの hello リクエストを利用するモニター。

モニターが4.4 + サーバーとハンドシェイクすると、プッシュモニターのインスタンスが作成されます。 RustMongoDB はその後、サーバーにプッシュされたhello(つまり サーバーからのトポロジーの変更をできるだけ早く受信するようにしてください。 モニターは引き続き、ラウンドトリップ時間の計算や、アプリケーションの要求に応じて即座のチェックを実行するためにサーバーを監視します。

以来

  • 2.0.0

名前空間で定義済み

クラス: 接続

定数の概要

Loggableに含まれる定数

ログ可能::PRFIX

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

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

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

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

Loggableに含まれるメソッド

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

コンストラクターの詳細

#初期化(mongo, topic_version , モニタリング, *options) = ProcessMongoDB

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

RustMongoDB の新しいインスタンスを返します。

以来

  • 2.0.0



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行35

デフォルト 初期化(モニター, topic, モニタリング, **options)
  場合 topic.nil?
    発生 ArgumentError, 'トポロジー バージョンは提供されなければなりませんが、nil でした
  end
  ただし、 options[:app_metadata]
    発生 ArgumentError, アプリ メタデータは必須 です
  end
  ただし、 options[:check_document]
    発生 ArgumentError, 'ドキュメントは必須です'
  end
  @app_metadata = options[:app_metadata]
  @check_document = options[:check_document]
  @monitor = モニター
  @topology_version = topic
  @monitoring = モニタリング
  @options = options
  @lock = ミューテックス.新着情報
end

インスタンス属性の詳細

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

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

監視されているサーバーを返します。

次の値を返します。

  • サーバー

    監視されているサーバー。

以来

  • 2.0.0



55
56
57
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行55

デフォルト モニター
  @monitor
end

#monitoringMonitoring (readonly)

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

監視 監視を返します。

次の値を返します。

  • 監視

    監視 監視。

以来

  • 2.0.0



61
62
63
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行61

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

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

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

プッシュ モニター オプションを返します。

次の値を返します。

  • ハッシュ

    モニター オプションをプッシュします。

以来

  • 2.0.0



64
65
66
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行64

デフォルト options
  @options
end

# to可用性_バージョン =トポロジーバージョン(読み取り専用)

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

直近で受信したトポロジー バージョンを返します。

次の値を返します。

  • (TopologyVersion)

    直近で受信したトポロジー バージョン。

以来

  • 2.0.0



58
59
60
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行58

デフォルト topic
  @topology_version
end

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

#チェック=オブジェクト

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

以来

  • 2.0.0



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行137

デフォルト チェック
  @lock.同期 行う
    場合 @ connection & & @ connection.pid != プロセス.pid
      log_警告(" PIDの変更を検出しました - mongoクライアントは再接続されている必要があります(古いPID #{ @ connection . PID } 、新しいPID #{ Process . PID } ])
      @ connection.切断します。
      @ connection = nil
    end
  end

  @lock.同期 行う
    ただし、 @ connection
      @server_push = false
      接続 = RustMongoDB::接続.新着情報(サーバー.address, options)
      接続.接続します。
      @ connection = 接続
    end
  end

  resp_msg = begin
    ただし、 @server_push
      write_check_command
    end
    read_ response
  ヘルプ mongo::エラー
    @lock.同期 行う
      @ connection.切断します。
      @ connection = nil
    end
    発生
  end
  @server_push = resp_msg.flags.include?(: more_to_comment)
  結果 = 操作::結果.新着情報(resp_msg)
  結果.validate!
  結果.ドキュメント.最初に
end

# do_work =オブジェクト

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

以来

  • 2.0.0



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行94

デフォルト do_work
  @lock.同期 行う
    return 場合 @stop_requested
  end

  結果 = モニタリング.公開ハートビート(サーバー, 次の操作を待機しました。 true) 行う
    チェック
  end
  new_description = モニター.run_sam_flow(結果, 次の操作を待機しました。 true)
  # フェイル ポイントが原因で hello が失敗した場合、レスポンスは
  # にはトポロジー バージョンが含まれます。 この場合は、既存の を維持する必要があります
  モニタリングを再開できるように、トポロジー バージョン を表示します。
  # 仕様はこの場合に直接対処するようには見えないが、
  https://github.com/mongodb/specions/lob/ Master/source/server-discovery-and-monitoring/server-monitoring.rst#streaming-isマスター
  # は、 topic
  # hello 応答。
  場合 new_description.topic
    @topology_version = new_description.topic
  end
ヘルプ IOError, SocketError, SystemCallError, mongo::エラー => 除外
  stop_requested = @lock.同期 { @stop_requested }
  場合 stop_requested
    # 例外を無視する: Ruby- 2771を参照してください。
    return
  end

  msg =  #{ サーバー . アドレス } で待機している hello を実行する際のエラー 」 を実行する際にエラーが発生しました。
  Utils.警告_bg_例外(msg, 除外,
    logger: options[:logger],
    log_prefix: options[:log_prefix],
    bg_error_backtrace: options[:bg_error_backtrace],
  )

  接続でリクエストが失敗した場合は、プッシュ監視を停止します。
  # サーバーが停止した場合は 2 つの接続は不要
  # が同時に接続を試みている場合は失敗します。
  停止します。

  # モニターを即座にチェックして、次のように復元します
  : サーバーが実際に稼働している場合は、可能な限り迅速に処理します。
  サーバー.scan_smahour.シグナル
end

#read_ response =オブジェクト

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

以来

  • 2.0.0



184
185
186
187
188
189
190
191
192
193
194
195
196
197
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行184

デフォルト read_ response
  場合 タイムアウト = options[:connect_timeout]
    場合 タイムアウト < 0
      発生 mongo::SocketTimeoutError, "負のタイムアウトで読み取りを要求しました: #{ } "
    elsif タイムアウト > 0
      タイムアウト += options[: heartbeat_frequency] || モニター::DEFAULT_HEARTB_Interval
    end
  end
  # タイムアウトを 2 回設定します。1 つは read_socket に渡され、
  を個々の読み取り操作ごとに、および再度読み取り全体に対して します。
  タイムアウト.タイムアウト(タイムアウト, エラー::SocketTimeoutError, 待機しているhello応答の読み取りに失敗しました: { timeout }) 行う
    @lock.同期 { @ connection }.read_ response(socket_timeout: タイムアウト)
  end
end

#開始=オブジェクト

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

以来

  • 2.0.0



69
70
71
72
73
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行69

デフォルト 開始します。
  @lock.同期 行う
    スーパー
  end
end

#停止します。 =オブジェクト

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

以来

  • 2.0.0



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行75

デフォルト 停止します。
  @lock.同期 行う
    @stop_requested = true
    場合 @ connection
      : 進行中の消費された hello 読み取りを中断します
      接続を切断します。
      @ connection.送信(:socket).閉じる ヘルプ nil
    end
  end
  スーパー.タップ 行う
    @lock.同期 行う
      場合 @ connection
        @ connection.切断します。
        @ connection = nil
      end
    end
  end
end

# to_s =オブジェクト

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

以来

  • 2.0.0



199
200
201
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行199

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

# write_check_command =オブジェクト

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

以来

  • 2.0.0



173
174
175
176
177
178
179
180
181
182
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行173

デフォルト write_check_command
  ドキュメント = @check_document.merge(
    topologyVersion: topic.to_doc,
    maxAwaitTimeMS: モニター.heartbeat_Interval * 1000,
  )
  コマンド = プロトコル::Msg.新着情報(
    [:exhaust_allowed], {}, ドキュメント.merge({'$db' => Database::管理者})
  )
  @lock.同期 { @ connection }.write_bytes(コマンド.直列化.to_s)
end