클래스: Mongo::Cluster::CursorReaper Private
- 상속:
-
객체
- 객체
- Mongo::Cluster::CursorReaper
- 다음을 포함합니다.
- 재시도 가능
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
가비지 수집된 커서를 소진되지 않고 닫을 수 있도록 킬 커서(kill cursor) 작업을 정기적으로 전송하는 관리자입니다.
상수 요약 접기
- FREQUENCY =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 리퍼가 보류 중인 커서 종료 작업을 보내는 기본값 시간 간격입니다.
1.동결
인스턴스 속성 요약 접기
- #cluster ⇒ 객체 읽기 전용 비공개
인스턴스 메서드 요약 접기
-
#initialize(cluster) ⇒ CursorReaper
생성자
비공개
커서 리퍼를 만듭니다.
-
#kill_cursors ⇒ 객체 (동의어: #execute, #flush)
비공개
보류 중인 모든 킬 커서 작업을 실행합니다.
-
#read_scheduled_kill_specs ⇒ 객체
비공개
예약된 킬 커서 작업을 읽고 디코딩합니다.
-
#Register_cursor(ID) ⇒ 객체
비공개
커서 ID를 활성으로 등록합니다.
-
#Schedule_kill_cursor(kill_spec) ⇒ 객체
비공개
커서 종료 작업이 최종적으로 실행되도록 예약합니다.
-
#unregister_cursor(ID) ⇒ 객체
비공개
더 이상 활성 상태가 아님을 나타내는 커서 ID의 등록을 취소합니다.
Retryable에 포함된 메서드
#read_Worker, #select_server, #write_Worker
생성자 세부 정보
#initialize(cluster) ⇒ CursorReaper
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 리퍼를 만듭니다.
42 43 44 45 46 47 48 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 42 def 초기화(cluster) @cluster = cluster @to_kill = {} @active_cursor_ids = 세트.신규 @mutex = 뮤텍스.신규 @kill_spec_queue = 대기열.신규 end |
인스턴스 속성 세부 정보
#cluster ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
50 51 52 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 50 def cluster @cluster end |
인스턴스 메서드 세부 정보
#kill_cursors ⇒ 객체 ~ 라고도 함: 실행, 플러시
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
보류 중인 모든 킬 커서 작업을 실행합니다.
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-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 133 def kill_cursors # TODO를 최적화하여 동일한 작업에 대한 커서 작업을 배치 종료합니다. # 각 커서 를 종료하는 대신 서버/ 데이터베이스/ 컬렉션 # 개별적으로. 루프 do server_address = nil kill_spec = @mutex.동기화 do read_scheduled_kill_specs # 삭제 예정인 커서가 있는 서버 를 찾습니다. server_address, 사양 = @to_kill.감지 { |_, 사양| 사양.어떤? } 만약 사양.nil? # 모든 서버의 사양이 비어 있으며 할 일이 없습니다. 반환 end # 이렇게 하면 대기열의 사양이 변경됩니다. # 커서 죽이기 작업이 실패하면 다음을 시도하지 않습니다. # 해당 커서 를 다시 종료합니다. 사양 = 사양.가져(1).탭 do |arr| 사양.빼기(arr) end.first 하지 않는 한 @active_cursor_ids.포함?(사양.cursor_id) # 커서는 이미 종료되었으며, 일반적으로 다음과 같은 이유로 인해 # 이 반복되어 완료되었습니다. 다음에서 킬 사양 제거 # 더 이상 작업을 수행하지 않고도 기록을 저장할 수 있습니다. 사양 = nil end 사양 end # 종료할 사양이 있었지만 해당 커서가 이미 종료된 경우, # 다른 사양을 찾습니다. 다음 하지 않는 한 kill_spec # kill_spec을 직접 KillCursors에 전달할 수도 있습니다. # 작업, 하지만 이렇게 하면 해당 작업이 # 해시를 허용하는 다른 모든 API와 다른 API. 사양 = { cursor_ids: [kill_spec.cursor_id], coll_name: kill_spec.coll_name, db_name: kill_spec.db_name, } op = 작업::killCursors.신규(사양) 서버 = cluster.서버.감지 do |서버| 서버.주소 == server_address end 하지 않는 한 서버 # TODO 현재 해당 주소 에 대한 서버 가 없습니다. # 커서가 연결되어 있습니다. 커서를 다음 위치에 두어야 합니다. # 나중에 (서버가 다시 돌아올 때) 종료될 대기열입니다. 다음 end = { server_api: 서버.[:server_api], connection_global_id: kill_spec.connection_global_id, } op.실행(서버, 컨텍스트: 작업::Context.신규(옵션: )) 만약 Session = kill_spec.Session 만약 Session.암시적? Session.end_session end end end end |
#read_scheduled_kill_specs ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
예약된 킬 커서 작업을 읽고 디코딩합니다.
이 메서드는 잠금 없이 인스턴스 변수를 변경하므로 스레드로부터 안전하지 않습니다. 일반적으로 자체 호출해서는 안 되며 'kill_cursor' 메서드의 헬퍼입니다.
114 115 116 117 118 119 120 121 122 123 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 114 def read_scheduled_kill_specs 동안 kill_spec = @kill_spec_queue.팝(true) 만약 @active_cursor_ids.포함?(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를 활성으로 등록합니다.
71 72 73 74 75 76 77 78 79 80 81 82 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 71 def register_cursor(id) 만약 id.nil? 올리다 ArgumentError, 'nil cursor_id로 'register_cursor가 호출됨' end 만약 id == 0 올리다 ArgumentError, 'cursor_id=0 (으)로 호출된 Register_cursor' end @mutex.동기화 do @active_cursor_ids << id end end |
#Schedule_kill_cursor(kill_spec) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 종료 작업이 최종적으로 실행되도록 예약합니다.
57 58 59 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 57 def Schedule_kill_cursor(kill_spec) @kill_spec_queue << kill_spec end |
#unregister_cursor(id) ⇒ Object
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
더 이상 활성 상태가 아님을 나타내는 커서 ID의 등록을 취소합니다.
94 95 96 97 98 99 100 101 102 103 104 105 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb', 줄 94 def unregister_cursor(id) 만약 id.nil? 올리다 ArgumentError, 'nil cursor_id로 unregister_cursor가 호출됨' end 만약 id == 0 올리다 ArgumentError, 'unregister_cursor가 cursor_id=0 (으)로 호출되었습니다.' end @mutex.동기화 do @active_cursor_ids.삭제(id) end end |