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

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

Overview

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

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

以来

  • 2.3.0

定数の概要の削減

頻度 =

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

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

以来

  • 2.3.0

1.freeze

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

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

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

#read_worker#select_server#write_worker

コンストラクターの詳細

#initialize(cluster) ⇒ CursorReaper

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

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

パラメーター:

以来

  • 2.3.0



42
43
44
45
46
47
48
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行42

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

インスタンス属性の詳細

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

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

以来

  • 2.3.0



50
51
52
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行50

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

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

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

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

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

例:

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

cursor_reaper.kill_cursors

以来

  • 2.3.0



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
203
204
205
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行133

デフォルト 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

    ただし、 サーバー
      # TODO では、現在、
      は に関連付けられています。 カーソルは のままにする必要があります。
      後で(サーバーが戻ったとき)に強制終了するようにしてください。
      次へ
    end

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

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

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

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

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

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

以来

  • 2.3.0



114
115
116
117
118
119
120
121
122
123
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行114

デフォルト 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
    end
  end
ヘルプ ThreadError
  # 空のキュー。何もすることがありません。
end

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

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

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

例:

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

cursor_reaper.register_cursor(id)

パラメーター:

  • id (整数)

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

以来

  • 2.3.0



71
72
73
74
75
76
77
78
79
80
81
82
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行71

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

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

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

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

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

パラメーター:

以来

  • 2.3.0



57
58
59
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行57

デフォルト 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。

以来

  • 2.3.0



94
95
96
97
98
99
100
101
102
103
104
105
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/readers/cursor_reader.rb', 行94

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

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