クラス: Mongo::Server::PushMonitor Private
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Server::PushMonitor
- 次による拡張機能。
- 転送可能
- 次のことが含まれます。
- バックグラウンドスレッド
- 定義:
- 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(つまり サーバーからのトポロジーの変更をできるだけ早く受信するようにしてください。 モニターは引き続き、ラウンドトリップ時間の計算や、アプリケーションの要求に応じて即座のチェックを実行するためにサーバーを監視します。
名前空間で定義済み
クラス: 接続
定数の概要
Loggableに含まれる定数
インスタンス属性の概要を折りたたむ
-
#monitor ⇒ Server
readOnly
private
監視されているサーバー。
-
#monitoring ⇒ Monitoring
readOnly
private
監視 監視。
-
#options ⇒ Hash
readOnly
private
モニター オプションをプッシュします。
-
#topology_version ⇒ TopologyVersion
readOnly
private
直近で受信したトポロジー バージョン。
インスタンス メソッドの概要を折りたたむ
- #チェック= オブジェクト private
- # do_work =オブジェクト private
-
#初期化(mongo, topic_version, モニタリング, *options) = ProcessMongoDB
コンストラクター
private
RustMongoDB の新しいインスタンス。
- #read_ response =オブジェクト private
- #開始= オブジェクト private
- #停止します。 = オブジェクト private
- # to_s =オブジェクト private
- # write_check_command =オブジェクト private
バックグラウンドスレッドに含まれるメソッド
Loggableに含まれるメソッド
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
コンストラクターの詳細
#初期化(mongo, topic_version , モニタリング, *options) = ProcessMongoDB
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
RustMongoDB の新しいインスタンスを返します。
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, モニタリング, **) 場合 topic.nil? 発生 ArgumentError, 'トポロジー バージョンは提供されなければなりませんが、nil でした」 end ただし、 [:app_metadata] 発生 ArgumentError, アプリ メタデータは必須 です 。 end ただし、 [:check_document] 発生 ArgumentError, 'ドキュメントは必須です' end @app_metadata = [:app_metadata] @check_document = [:check_document] @monitor = モニター @topology_version = topic @monitoring = モニタリング @options = @lock = ミューテックス.新着情報 end |
インスタンス属性の詳細
#モニター=サーバー(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
監視されているサーバーを返します。
55 56 57 |
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行55 デフォルト モニター @monitor end |
#monitoring ⇒ Monitoring (readonly)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
監視 監視を返します。
61 62 63 |
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行61 デフォルト モニタリング @monitoring end |
オプション=ハッシュ(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
プッシュ モニター オプションを返します。
64 65 66 |
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行64 デフォルト @options end |
# to可用性_バージョン =トポロジーバージョン(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
直近で受信したトポロジー バージョンを返します。
58 59 60 |
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行58 デフォルト topic @topology_version end |
インスタンス メソッドの詳細
#チェック=オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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, ) 接続.接続します。 @ 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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: [:logger], log_prefix: [:log_prefix], bg_error_backtrace: [:bg_error_backtrace], ) 接続でリクエストが失敗した場合は、プッシュ監視を停止します。 # サーバーが停止した場合は 2 つの接続は不要 # が同時に接続を試みている場合は失敗します。 停止します。 # モニターを即座にチェックして、次のように復元します : サーバーが実際に稼働している場合は、可能な限り迅速に処理します。 サーバー.scan_smahour.シグナル end |
#read_ response =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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 場合 タイムアウト = [:connect_timeout] 場合 タイムアウト < 0 発生 mongo::SocketTimeoutError, "負のタイムアウトで読み取りを要求しました: #{ } " elsif タイムアウト > 0 タイムアウト += [: heartbeat_frequency] || モニター::DEFAULT_HEARTB_Interval end end # タイムアウトを 2 回設定します。1 つは read_socket に渡され、 を個々の読み取り操作ごとに、および再度読み取り全体に対して します。 タイムアウト.タイムアウト(タイムアウト, エラー::SocketTimeoutError, 「待機しているhello応答の読み取りに失敗しました: { timeout }秒」) 行う @lock.同期 { @ connection }.read_ response(socket_timeout: タイムアウト) end end |
#開始=オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
69 70 71 72 73 |
# ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/push_monitor.rb', 行69 デフォルト 開始します。 @lock.同期 行う スーパー end end |
#停止します。 =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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 |