클래스: Mongo::Retryable::ReadWorker Private

상속:
Base Worker 모두 표시
다음에 정의됨:
빌드/ Ruby-driver-v2.19/lib/mongo/retryable/read_Worker.rb

개요

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

읽기 작업 재시도와 관련된 로직을 구현합니다.

이후:

  • 2.19.0

인스턴스 속성 요약

BaseWorker에서 상속된 속성

#retryable

인스턴스 메서드 요약 접기

BaseWorker에서 상속된 메서드

#initialize

생성자 세부 정보

이 클래스는 Mongo::Retryable::BaseWorker에서 생성자를 상속합니다.

인스턴스 메서드 세부 정보

#read_with_one_retry(options = nil) { ... } ⇒ 결과

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

참고:

소켓 오류 시 읽기 작업만 재시도합니다.

네트워크 오류 시 한 번 재시도하여 읽기 작업을 실행합니다.

이 메서드는 운전자 에서 일부 내부 하우스키핑 작업에 사용됩니다. 애플리케이션에서 요청한 읽기는 이 메서드 대신 read_with_retry를 사용해야 합니다.

예시:

읽기를 실행합니다.

read_with_one_retry do
  ...
end

매개변수:

  • 옵션 (해시 | nil) (기본값: nil)

    옵션.

옵션 해시(options):

  • :retry_message (string)

    재시도 시 기록할 메시지입니다.

수율:

  • 인수 없이 제공된 차단 을 호출합니다.

반환합니다:

  • (결과)

    작업 결과입니다.

이후:

  • 2.2.6



149
150
151
152
153
154
155
156
157
# 파일 'build/ruby-driver-v2.19/lib/mongo/retryable/read_Worker.rb', 줄 149

def read_with_one_retry(옵션 = nil)
  yield
구출 *retryable_exceptions, 오류::풀 오류 => e
  올리다 e 하지 않는 한 e.write_retryable?

  retry_message = 옵션 && 옵션[:retry_message]
  log_retry(e, 메시지: retry_message)
  yield
end

#read_with_retry(session = nil, server_selector = nil, &block) ⇒ 결과

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

읽기 작업을 실행하고 재시도합니다.

이 메서드는 지정된 서버 선택기에 대해 서버 선택을 수행하고 초기 쿼리 작업을 실행하고 결과를 반환해야 하는 제공된 차단 을 양보합니다. 차단 은 작업을 위해 선택한 서버 를 전달합니다. 차단 에서 예외가 발생하고 이 예외가 읽기 재시도 가능 오류에 해당하고 클라이언트 에 대해 읽기 재시도가 활성화된 경우 이 메서드는 서버 선택을 다시 수행하고 잠재적으로 다른 서버 를 사용하여 다시 차단 을 양보합니다. 차단 이 성공적으로 반환되면 차단 결과가 반환됩니다.

최신 읽기 재시도가 켜져 있는 경우( 기본값), 초기 읽기 작업이 한 번 재시도됩니다. 레거시 읽기 재시도가 켜져 있는 경우, 초기 읽기 작업은 :max_read_retries 클라이언트 설정에 따라 0회 이상 재시도되며, 기본값 은 1 입니다. 읽기 재시도를 비활성화하려면 클라이언트 에서 retry_reads: false를 설정하다 하고 :max_read_retries를 0 로 설정하여 최신 읽기 재시도를 해제합니다.

예시:

읽기를 실행합니다.

read_with_retry(session, server_selector) do |server|
  ...
end

매개변수:

  • Session (Mongo::Session | nil) (기본값: nil)

    작업이 실행되는 세션입니다.

  • server_selector (Mongo::ServerSelector::Selectable | nil) (기본값: nil)

    작업을 위한 서버 선택기입니다.

  • 차단 (Proc)

    실행할 차단 입니다.

반환합니다:

  • (결과)

    작업 결과입니다.

이후:

  • 2.19.0



113
114
115
116
117
118
119
120
121
122
123
# 파일 'build/ruby-driver-v2.19/lib/mongo/retryable/read_Worker.rb', 줄 113

def read_with_retry(Session = nil, server_selector = nil, &차단)
  만약 Session.nil? && server_selector.nil?
    deprecated_legacy_read_with_retry(&차단)
  elsif Session&.retry_reads?
    Modern_read_with_retry(Session, server_selector, &차단)
  elsif 고객.max_read_retries > 0
    legacy_read_with_retry(Session, server_selector, &차단)
  other
    read_without_retry(Session, server_selector, &차단)
  end
end

#read_with_retry_cursor(session, server_selector, view, &block) ⇒ 커서

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

읽기 작업을 실행하여 커서 를 반환하고 다시 시도합니다.

이 메서드는 지정된 서버 선택기에 대해 서버 선택을 수행하고 초기 쿼리 작업을 실행하고 결과를 반환해야 하는 제공된 차단 을 양보합니다. 차단 은 작업을 위해 선택한 서버 를 전달합니다. 차단 에서 예외가 발생하고 이 예외가 읽기 재시도 가능 오류에 해당하고 클라이언트 에 대해 읽기 재시도가 활성화된 경우 이 메서드는 서버 선택을 다시 수행하고 잠재적으로 다른 서버 를 사용하여 다시 차단 을 양보합니다. 차단 이 성공적으로 반환되면 차단 결과(Mongo::Operation::Result여야 함)를 사용하여 결과 설정하다 에 대한 Mongo::Cursor 객체 를 생성합니다. 그러면 커서 가 반환됩니다.

최신 읽기 재시도가 켜져 있는 경우( 기본값), 초기 읽기 작업이 한 번 재시도됩니다. 레거시 읽기 재시도가 켜져 있는 경우, 초기 읽기 작업은 :max_read_retries 클라이언트 설정에 따라 0회 이상 재시도되며, 기본값 은 1 입니다. 읽기 재시도를 비활성화하려면 클라이언트 에서 retry_reads: false를 설정하다 하고 :max_read_retries를 0 로 설정하여 최신 읽기 재시도를 해제합니다.

예시:

읽기를 실행하여 커서 를 반환합니다.

cursor = read_with_retry_cursor(session, server_selector, view) do |server|
  # return a Mongo::Operation::Result
  ...
end

매개변수:

  • Session (Mongo::Session)

    작업이 실행되는 세션입니다.

  • server_selector (Mongo::ServerSelector::Selectable)

    작업을 위한 서버 선택기입니다.

  • 보기 (CollectionView)

    쿼리를 정의하는 CollectionView 입니다.

  • 차단 (Proc)

    실행할 차단 입니다.

반환합니다:

  • (Cursor)

    결과 설정하다 의 커서 입니다.

이후:

  • 2.19.0



66
67
68
69
70
71
72
73
74
75
76
77
78
# 파일 'build/ruby-driver-v2.19/lib/mongo/retryable/read_Worker.rb', 줄 66

def read_with_retry_cursor(Session, server_selector, 보기, &차단)
  read_with_retry(Session, server_selector) do |서버|
    결과 = yield 서버

    # RUBY-2367: 쿼리 캐시 를 허용하도록 업데이트됩니다.
    멀티 배치 결과가 포함된 캐시 커서 #
    만약 쿼리 캐시.활성화? && !보기.컬렉션.system_collection?
      캐싱 커서.신규(보기, 결과, 서버, 세션: Session)
    other
      커서.신규(보기, 결과, 서버, 세션: Session)
    end
  end
end