クラス: Mongo::Cluster::CursorReaper Private

継承:
オブジェクト
  • オブジェクト
すべて表示
次のことが含まれます。
再試行可能
定義:
lib/mongo/cluster/readers/cursor_reaper.rb

Overview

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

使い果たされることなくガベージコレクションされたカーソルを閉じるために、 強制終了カーソル 操作を定期的に送信するマネージャー。

以来

  • 2.3.0

定数の概要の削減

頻度 =

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

カーソルリージョンが保留中の強制終了カーソル操作を送信するデフォルトの時間間隔。

以来

  • 2.3.0

1

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

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

再試行可能な に含まれるメソッド

#read_worker#select_server#with_overload_retry#write_worker

コンストラクターの詳細

#initialize(cluster) ⇒ CursorReaper

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

カーソル リーパーを作成します。

パラメーター:

以来

  • 2.3.0



39
40
41
42
43
44
45
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 39

デフォルト 初期化(クラスター)
  @cluster = クラスター
  @to_kill = {}
  @active_cursor_ids = セット.新着情報
  @mutex = ミューテックス.新着情報
  @kill_spec_queue = Queue.新着情報
end

インスタンス属性の詳細

#クラスター=オブジェクト(読み取り専用)

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

以来

  • 2.3.0



47
48
49
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 47

デフォルト クラスター
  @cluster
end

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

# kill_cursors =オブジェクト名:実行フラッシュ

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

保留中のすべての強制終了カーソル操作を実行します。

例:

保留中の強制終了カーソル操作を実行します。

cursor_reaper.kill_cursors

以来

  • 2.3.0



126
127
128
129
130
131
132
133
134
135
136
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 126

デフォルト kill_cursors
  # TODO: これを最適化して、同じノードのカーソル操作をバッチする強制終了します
  各カーソルを強制終了する代わりに、サーバー/データベース/コレクションを表示
  # を個別に指定します。
  ループ 行う
    server_address = nil

    kill_spec = @mutex.同期 行う
      read_sScheduled_kill_specs
      # 破棄される予定のカーソルがあるサーバーを見つけます。
      server_address, specs =
        @to_kill.検出 { |_, specs| specs.any? }

      場合 specs.nil?
        # すべてのサーバーは空の仕様を持ち、実行する操作はありません。
        return
      end

      これにより、キュー内の仕様が変更されることに注意してください。
      # 強制終了カーソル操作が失敗した場合、次の操作は実行されません
      は、そのカーソルを再度強制終了します。
      スペック = specs.(1).タップ 行う |アービタ|
        specs.減算(アービタ)
      end.最初に

      ただし、 @active_cursor_ids.include?(スペック.cursor_id)
        カーソルはすでに強制終了されています。通常、次の理由でです:
        完了まで反復処理されました。 強制終了の仕様を から削除する
        追加の作業を行わずにレコードを番号化します。
        スペック = nil
      end

      スペック
    end

    強制終了する指定があり、そのカーソルがすでに強制終了されている場合
    別の仕様を検索します。
    次へ ただし、 kill_spec

    # kill_spec を killCursor に直接渡すこともできます
    ただし、これにより、その操作は次のようになります
    ハッシュを受け入れる他のすべての API とは異なる API を使用します。
    スペック = {
      cursor_ids: [ kill_spec.cursor_id ],
      coll_name: kill_spec.coll_name,
      db_name: kill_spec.db_name,
    }
    op = 操作::killCursors.新着情報(スペック)

    サーバー = クラスター.サーバー.検出 行う |サーバー|
      サーバー.address == server_address
    end

    ただし、 サーバー
      #このカーソルのサーバーが削除しました -- 一時的に、
      # は永続的に存在する可能性がありますが、正確ではありません。からの接続を防ぐには
      永続的な障害が発生した場合、暗黙的にエラーが発生する
      この killspec を 削除 し、 に移動します。
      次へ
    end

    options = {
      server_api: サーバー.options[:server_api],
      connection_ global_id: kill_spec.connection_ global_id,
    }
    場合 接続 = kill_spec.接続
      op.execution_with_ connection(接続, context: 操作::Context.新着情報(次のオプションがあります。 options))
      接続.connection_Pool.checkpoint_in(接続)
    else
      op.実行する(サーバー, context: 操作::Context.新着情報(次のオプションがあります。 options))
    end

    次へ ただし、 セッション = kill_spec.セッション

    セッション.end_session 場合 セッション.implicit?
  end
end

#read_sScheduled_kill_specs 詳しくは、オブジェクト

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

スケジュールされた強制終了カーソル操作の読み取りとデコード。

このメソッドはロックせずにインスタンス変数をミューテーションするため、スレッドセーフではありません。通常、それ自体は呼び出されないでください。これは kill_cursor メソッドのヘルパーです。

以来

  • 2.3.0



103
104
105
106
107
108
109
110
111
112
113
114
115
116
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 103

デフォルト read_sScheduled_kill_specs
  一方 kill_spec = @kill_spec_queue.ポップ(true)
    場合 @active_cursor_ids.include?(kill_spec.cursor_id)
      @to_kill[kill_spec.server_address] ||= セット.新着情報
      @to_kill[kill_spec.server_address] < kill_spec
    elsif (セッション = kill_spec.セッション) & & セッション.implicit?
      # カーソルはすでに閉じられていました。セッションをすぐに終了してリリース
      kill_spec がスコープから除外されるのを待つのではなく、 を参照してください。
      セッション.end_session
    end
  end
ヘルプ ThreadError
  # 空のキュー。何もすることがありません。
end

# register_cursor ( ID ) =オブジェクト

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

カーソル ID をアクティブとして登録します。

例:

カーソルをアクティブとして登録します。

cursor_reaper.register_cursor(id)

パラメーター:

  • id (整数)

    アクティブとして登録するカーソルの ID。

次の値が発生します。

  • (ArgumentError)

以来

  • 2.3.0



68
69
70
71
72
73
74
75
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 68

デフォルト register_cursor(id)
  発生 ArgumentError, : nil cursor_id を使用して呼び出された register_cursor : 場合 id.nil?
  発生 ArgumentError, cursor_id = 0で呼び出される Register_cursor 場合 id == 0

  @mutex.同期 行う
    @active_cursor_ids < id
  end
end

# schedule_kill_cursor (kill_spec) =オブジェクト

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

強制終了カーソル操作を最終的に実行するようにスケジュールします。

パラメーター:

以来

  • 2.3.0



54
55
56
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 54

デフォルト schedule_kill_cursor(kill_spec)
  @kill_spec_queue < kill_spec
end

#unregister_cursor(id) ⇒ Object

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

カーソル ID の登録を解除し、アクティブでなくなったことを示します。

例:

Unregister a cursor.

cursor_reaper.unregister_cursor(id)

パラメーター:

  • id (整数)

    登録を解除するカーソルの ID。

次の値が発生します。

  • (ArgumentError)

以来

  • 2.3.0



87
88
89
90
91
92
93
94
# ファイル 'lib/mongo/cluster/readers/cursor_reaper.rb' 行 87

デフォルト unregister_cursor(id)
  発生 ArgumentError, : nil cursor_id を使用して呼び出された unregister_cursor : 場合 id.nil?
  発生 ArgumentError, ' cursor_id= 0で呼び出される unreg Register_cursor ' 場合 id == 0

  @mutex.同期 行う
    @active_cursor_ids.削除(id)
  end
end