클래스: Mongo::Cluster::CursorReaper Private
- 상속:
-
객체
- 객체
- Mongo::Cluster::CursorReaper
- 다음을 포함합니다.
- 재시도 가능
- 다음에 정의됨:
- lib/ Mongo/ 클러스터/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, #with_overload_retry, #write_Worker
생성자 세부 정보
#initialize(cluster) ⇒ CursorReaper
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 리퍼를 만듭니다.
39 40 41 42 43 44 45 |
# 파일 'lib/ Mongo/ 클러스터/reapers/cursor_reaper.rb', 39줄 def 초기화(cluster) @cluster = cluster @to_kill = {} @active_cursor_ids = 세트.신규 @mutex = 뮤텍스.신규 @kill_spec_queue = 대기열.신규 end |
인스턴스 속성 세부 정보
#cluster ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
47 48 49 |
# 파일 'lib/ Mongo/ 클러스터/reapers/cursor_reaper.rb', 47줄 def cluster @cluster end |
인스턴스 메서드 세부 정보
#kill_cursors ⇒ 객체 ~ 라고도 함: 실행, 플러시
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
보류 중인 모든 킬 커서 작업을 실행합니다.
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/ 클러스터/reapers/cursor_reaper.rb', 126줄 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 하지 않는 한 서버 # 이 커서 의 서버 없어졌습니다 --- 일시적으로, # 영구적일 수도 있지만 알 수는 없습니다. 연결을 방지하려면 # 영구적인 오류 발생 시 유출되는 경우, # 이 killspec을 제거하고 계속 진행합니다. 다음 end = { server_api: 서버.[:server_api], connection_global_id: kill_spec.connection_global_id, } 만약 연결 = kill_spec.연결 op.execution_with_connection(연결, 컨텍스트: 작업::Context.신규(옵션: )) 연결.connection_pool.check_in(연결) other op.실행(서버, 컨텍스트: 작업::Context.신규(옵션: )) end 다음 하지 않는 한 Session = kill_spec.Session Session.end_session 만약 Session.암시적? end end |
#read_scheduled_kill_specs ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
예약된 킬 커서 작업을 읽고 디코딩합니다.
이 메서드는 잠금 없이 인스턴스 변수를 변경하므로 스레드로부터 안전하지 않습니다. 일반적으로 자체 호출해서는 안 되며 kill_cursor 메서드의 헬퍼입니다.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# 파일 'lib/ Mongo/ 클러스터/reapers/cursor_reaper.rb', 103줄 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 elsif (Session = kill_spec.Session) && Session.암시적? # 커서가 이미 닫혀 있습니다. 세션을 즉시 종료하여 출시하다 kill_spec이 범위를 벗어날 때까지 기다리지 않고 # 참조합니다. Session.end_session end end 구출 ThreadError # 대기열이 비어 있으면 할 일이 없습니다. end |
#Register_cursor(ID) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 ID를 활성으로 등록합니다.
68 69 70 71 72 73 74 75 |
# 파일 'lib/ Mongo/ 클러스터/reapers/cursor_reaper.rb', 68줄 def register_cursor(id) 올리다 ArgumentError, 'nil cursor_id로 'register_cursor가 호출됨' 만약 id.nil? 올리다 ArgumentError, 'cursor_id=0 (으)로 호출된 Register_cursor' 만약 id == 0 @mutex.동기화 do @active_cursor_ids << id end end |
#Schedule_kill_cursor(kill_spec) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
커서 종료 작업이 최종적으로 실행되도록 예약합니다.
54 55 56 |
# 파일 'lib/ Mongo/ 클러스터/reapers/cursor_reaper.rb', 54줄 def Schedule_kill_cursor(kill_spec) @kill_spec_queue << kill_spec end |
#unregister_cursor(id) ⇒ Object
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
더 이상 활성 상태가 아님을 나타내는 커서 ID의 등록을 취소합니다.
87 88 89 90 91 92 93 94 |
# 파일 'lib/ Mongo/ 클러스터/reapers/cursor_reaper.rb', 87줄 def unregister_cursor(id) 올리다 ArgumentError, 'nil cursor_id로 unregister_cursor가 호출됨' 만약 id.nil? 올리다 ArgumentError, 'unregister_cursor가 cursor_id=0 (으)로 호출되었습니다.' 만약 id == 0 @mutex.동기화 do @active_cursor_ids.삭제(id) end end |