모듈: Mongo::Retryable
- 확장자:
- 전달 가능
- 포함 항목:
- Cluster::CursorReaper, Collection, Collection::View::Aggregation::Behavior, Collection::View::ChangeStream, Collection::View::MapReduce, Cursor, Database, Database::View, Index::View, SearchIndex: :View, Server::Connection, 세션
- 다음에 정의됨:
- lib/ Mongo/retryable.rb,
lib/ Mongo/retryable/base_Worker.rb,
lib/ Mongo/retryable/read_Worker.rb,
lib/ Mongo/retryable/backpressure.rb,
lib/ Mongo/retryable/retry_policy.rb,
lib/ Mongo/retryable/write_Worker.rb
개요
작업 재시도에 대한 기본 동작을 정의합니다.
네임스페이스 아래에 정의됨
모듈: 배압 클래스: BaseWorker, ReadWorker, RetryPolicy, WriteWorker
인스턴스 메서드 요약 접기
-
#read_Worker ⇒ 객체
비공개
재시도 가능 읽기를 처리하기 위한 읽기 워커를 반환합니다.
-
#select_server(클러스터, server_selector, 세션, failed_server = nil, error: nil, timeout: nil) ⇒ Mongo::서버
비공개
이는 테스트 제품군이 재시도 시도 중에 서버 선택이 수행되었는지 확인할 수 있도록 하기 위한 별도의 방법입니다.
-
#with_overload_retry(context: nil, retry_enabled: true) ⇒ 객체
비공개
오버로드 재시도 로직으로 작업을 래핑합니다.
-
#write_Worker ⇒ 객체
비공개
재시도 가능 쓰기를 처리하기 위한 쓰기 (write) 워커를 반환합니다.
인스턴스 메서드 세부 정보
#read_Worker ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이는 테스트에서 이를 기반으로 기대치를 더할 수 있도록 공개된 메서드일 뿐입니다.
재시도 가능 읽기를 처리하기 위한 읽기 워커를 반환합니다.
86 87 88 |
# 파일 'lib/ Mongo/retryable.rb', 줄 86 def read_Worker @read_Worker ||= Read Worker.신규(self) end |
#select_server(클러스터, server_selector, 세션, failed_server = nil, error: nil, timeout: nil) ⇒ Mongo::Server
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이는 테스트 제품군이 재시도 시도 중에 서버 선택이 수행되었는지 확인할 수 있도록 하기 위한 별도의 방법입니다.
이는 공개 메서드이므로 필요에 따라 읽기 및 쓰기 (write) 작업자 위임을 통해 액세스할 수 있습니다.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# 파일 'lib/ Mongo/retryable.rb', 줄 49 def select_server(cluster, server_selector, Session, failed_server = nil, 오류: nil, timeout: nil) 우선순위가 낮은 = 만약 failed_server && deprioritize_server?(cluster, 오류) [ failed_server ] other [] end server_selector.select_server( cluster, nil, Session, 우선 순위가 낮은: 우선순위가 낮은, timeout: 타임아웃 ) end |
#with_overload_retry(context: nil, retry_enabled: true) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
오버로드 재시도 로직으로 작업을 래핑합니다. 과부하 오류(SystemOverloadedError + RetryableError)가 발생하면 최대 MAX_RETRIES회 지수 백오프를 사용하여 차단 다시 시도합니다.
차단 서버 선택이 포함되어 재시도 시 다시 수행되도록 해야 합니다. 커서 작업(getMore)의 경우 커서 고정되어 있으므로 동일한 서버 재사용됩니다.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# 파일 'lib/ Mongo/retryable.rb', 줄 117 def with_overload_retry(컨텍스트: nil, retry_enabled: true) 반환 yield 하지 않는 한 retry_enabled error_count = 0 루프 do 결과 = yield 반환 결과 구출 오류::시간 초과 오류 올리다 구출 오류::OperationFailure::패밀리 => e 올리다 e 하지 않는 한 e.레이블?('SystemOverloadedError') && e.레이블?('RetryableError') error_count += 1 정책 = 고객.retry_policy 지연 = 정책.backoff_delay(error_count) 올리다 e 하지 않는 한 정책.should_retry_overload?(error_count, 지연, 컨텍스트: 컨텍스트) 로거.로거.경고("오버로드 재시도로 인한 재시도: #{e.클래스.name}: #{e.}") sleep(지연) end end |
#write_Worker ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이는 테스트에서 이를 기반으로 기대치를 더할 수 있도록 공개된 메서드일 뿐입니다.
재시도 가능 쓰기를 처리하기 위한 쓰기 (write) 워커를 반환합니다.
96 97 98 |
# 파일 'lib/ Mongo/retryable.rb', 줄 96 def write_Worker @write_Worker ||= Write Worker.신규(self) end |