모듈: 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

개요

작업 재시도에 대한 기본 동작을 정의합니다.

이후:

  • 2.1.0

네임스페이스 아래에 정의됨

모듈: 배압 클래스: BaseWorker, ReadWorker, RetryPolicy, WriteWorker

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#read_Worker객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이는 테스트에서 이를 기반으로 기대치를 더할 수 있도록 공개된 메서드일 뿐입니다.

재시도 가능 읽기를 처리하기 위한 읽기 워커를 반환합니다.

이후:

  • 2.1.0



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) 작업자 위임을 통해 액세스할 수 있습니다.

반환합니다:

  • (Mongo::Server)

    서버 설정과 일치하는 서버 입니다.

이후:

  • 2.1.0



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)의 경우 커서 고정되어 있으므로 동일한 서버 재사용됩니다.

매개변수:

  • 컨텍스트 (Operation::Context | nil) (기본값: nil)

    CSOT 기한 확인을 위한 작업 컨텍스트입니다.

  • retry_enabled (true | false) (기본값: true)

    과부하 재시도 허용 여부입니다. false인 경우 재시도 없이 즉시 오버로드 오류가 발생합니다(retryReads/retryWrites가 비활성화된 경우 사용됨).

반환합니다:

  • (객체)

    차단의 결과입니다.

이후:

  • 2.1.0



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.message}")
    sleep(지연)
  end
end

#write_Worker객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이는 테스트에서 이를 기반으로 기대치를 더할 수 있도록 공개된 메서드일 뿐입니다.

재시도 가능 쓰기를 처리하기 위한 쓰기 (write) 워커를 반환합니다.

이후:

  • 2.1.0



96
97
98
# 파일 'lib/ Mongo/retryable.rb', 줄 96

def write_Worker
  @write_Worker ||= Write Worker.신규(self)
end