클래스: Mongo::Retryable::WriteWorker Private

상속:
Base Worker 모두 표시
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/retryable/write_Worker.rb

개요

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

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

이후:

  • 2.19.0

인스턴스 속성 요약

BaseWorker에서 상속된 속성

#retryable

인스턴스 메서드 요약 접기

BaseWorker에서 상속된 메서드

#initialize

생성자 세부 정보

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

인스턴스 메서드 세부 정보

#nro_write_with_retry(write_concern, context:) {|connection, txn_num, context| ... } ⇒ 객체

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

최신 재시도 가능 쓰기를 지원하지 않는 작업에 대한 재시도 가능 쓰기 래퍼입니다.

운전자 가 최신 재시도 가능 쓰기를 사용하도록 구성된 경우 이 메서드는 전달된 차단 에 정확히 한 번만 양보하므로 쓰기를 재시도하지 않습니다.

운전자 가 레거시 재시도 가능 쓰기를 사용하도록 구성된 경우 이 메서드는 레거시 로직을 사용하여 쓰기 (write) 재시도를 수행하는 legacy_write_with_retry에 위임됩니다.

매개변수:

  • write_concern (nil | 해시 | WriteConcern::Base)

    쓰기 고려 (write concern).

  • 컨텍스트 (컨텍스트)

    작업의 컨텍스트입니다.

수율 매개변수:

  • 연결 (연결)

    쓰기를 전송해야 하는 연결입니다.

  • txn_num (nil)

    nil을 트랜잭션 번호로 지정합니다.

  • 컨텍스트 (Operation::Context)

    작업 컨텍스트입니다.

이후:

  • 2.19.0



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/retryable/write_Worker.rb', 줄 103

def nro_write_with_retry(write_concern, 컨텍스트:, &차단)
  Session = 컨텍스트.Session
  서버 = select_server(cluster, ServerSelector.기본, Session)
  
  만약 Session&.고객.옵션[:retry_writes]
    시작
      서버.with_connection(connection_global_id: 컨텍스트.connection_global_id) do |연결|
        yield 연결, nil, 컨텍스트
      end
    구출 *retryable_exceptions, 오류::풀 오류, 오류::OperationFailure => e
      e.add_note('재시도 비활성화')
      올리다 e
    end
  other
    legacy_write_with_retry(서버, 컨텍스트: 컨텍스트, &차단)
  end
end

#retry_write_allowed?(session, write_concern) ⇒ true | false

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

세션 및 쓰기 고려가 쓰기 재시도를 지원하는지 여부를 쿼리합니다.

매개변수:

반환합니다:

  • (true | false)

    쓰기 재시도 허용 여부입니다.

이후:

  • 2.19.0



129
130
131
132
133
134
135
136
137
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/retryable/write_Worker.rb', 줄 129

def retry_write_allowed?(Session, write_concern)
  반환 거짓 하지 않는 한 Session&.retry_writes?

  만약 write_concern.nil?
    true
  other
    writeConcern.get(write_concern).인정?
  end
end

#write_with_retry(write_concern,ending_transaction: false, context:, &block) {|connection, txn_num, context| ... } ⇒ 결과

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

참고:

이는 부분 쓰기가 아직 발생하지 않았음을 확신할 수 있는 유일한 경우이므로 마스터가 아닌 장애에서만 작업을 재시도합니다.

전달된 차단 에 한 번 이상 양보하여 쓰기 (write) 재시도 기능을 구현합니다.

세션이 제공되고(따라서 배포에서 세션을 지원함) 클라이언트에서 최신 재시도 쓰기가 활성화된 경우 최신 재시도 로직이 호출됩니다. 그렇지 않으면 레거시 재시도 로직이 호출됩니다.

end_transaction 매개 변수가 true(트랜잭션이 커밋 또는 중단 중임을 나타냅니다)인 경우 작업은 정확히 한 번 실행됩니다. 트랜잭션에는 세션이 필요하므로 종료_트랜잭션이 true이고 세션이 nil인 경우 이 메서드는 ArgumentError를 발생시킵니다.

예시:

쓰기 (write) 를 실행합니다.

write_with_retry do
  ...
end

매개변수:

  • write_concern (nil | 해시 | WriteConcern::Base)

    쓰기 고려 (write concern).

  • end_transaction (true | false) (기본값은 false)

    쓰기 (write) 작업이 abortTransaction 또는 commitTransaction이면 true이고, 그렇지 않으면 false입니다.

  • 컨텍스트 (컨텍스트)

    작업의 컨텍스트입니다.

  • 차단 (Proc)

    실행할 차단 입니다.

수율 매개변수:

  • 연결 (연결)

    쓰기를 전송해야 하는 연결입니다.

  • txn_num (정수)

    트랜잭션 번호( ACID 종류가 아님).

  • 컨텍스트 (Operation::Context)

    작업 컨텍스트입니다.

반환합니다:

  • (결과)

    작업 결과입니다.

이후:

  • 2.1.0



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/retryable/write_Worker.rb', 줄 65

def write_with_retry(write_concern, end_transaction: 거짓, 컨텍스트:, &차단)
  Session = 컨텍스트.Session

  sure_valid_state!(end_transaction, Session)

  하지 않는 한 end_transaction || retry_write_allowed?(Session, write_concern)
    반환 legacy_write_with_retry(nil, 컨텍스트: 컨텍스트, &차단)
  end

  # 우리가 여기에 있다면 세션은 nil이 아닙니다. 세션이 nil이면
  # 실패한 retry_write_allowed? 확인합니다.

  서버 = select_server(cluster, ServerSelector.기본, Session)

  하지 않는 한 end_transaction || 서버.retry_writes?
    반환 legacy_write_with_retry(서버, 컨텍스트: 컨텍스트, &차단)
  end

  Modern_write_with_retry(Session, 서버, 컨텍스트, &차단)
end