클래스: Mongo::Retryable::WriteWorker Private
- 상속:
-
Base Worker
- 객체
- Base Worker
- Mongo::Retryable::WriteWorker
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/retryable/write_Worker.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
쓰기 작업 재시도와 관련된 로직을 구현합니다.
인스턴스 속성 요약
BaseWorker에서 상속된 속성
인스턴스 메서드 요약 접기
-
#nro_write_with_retry(write_concern, context:) {|connection, txn_num, context| ... } ⇒ 객체
비공개
최신 재시도 가능 쓰기를 지원하지 않는 작업에 대한 재시도 가능 쓰기 래퍼입니다.
-
#retry_write_allowed?(session, write_concern) ⇒ true | false
비공개
세션 및 쓰기 고려가 쓰기 재시도를 지원하는지 여부를 쿼리합니다.
-
#write_with_retry(write_concern,ending_transaction: false, context:, &block) {|connection, txn_num, context| ... } ⇒ 결과
비공개
전달된 차단 에 한 번 이상 양보하여 쓰기 (write) 재시도 기능을 구현합니다.
BaseWorker에서 상속된 메서드
생성자 세부 정보
이 클래스는 Mongo::Retryable::BaseWorker에서 생성자를 상속합니다.
인스턴스 메서드 세부 정보
#nro_write_with_retry(write_concern, context:) {|connection, txn_num, context| ... } ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
최신 재시도 가능 쓰기를 지원하지 않는 작업에 대한 재시도 가능 쓰기 래퍼입니다.
운전자 가 최신 재시도 가능 쓰기를 사용하도록 구성된 경우 이 메서드는 전달된 차단 에 정확히 한 번만 양보하므로 쓰기를 재시도하지 않습니다.
운전자 가 레거시 재시도 가능 쓰기를 사용하도록 구성된 경우 이 메서드는 레거시 로직을 사용하여 쓰기 (write) 재시도를 수행하는 legacy_write_with_retry에 위임됩니다.
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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
세션 및 쓰기 고려가 쓰기 재시도를 지원하는지 여부를 쿼리합니다.
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를 발생시킵니다.
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 |