클래스: Mongo::Retryable::WriteWorker Private
- 상속:
-
Base Worker
- 객체
- Base Worker
- Mongo::Retryable::WriteWorker
- 다음에 정의됨:
- 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, context:,ending_transaction: false, &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에 위임됩니다.
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# 파일 'lib/ Mongo/retryable/write_Worker.rb', 줄 105 def nro_write_with_retry(쓰기 (write), 컨텍스트:, &차단) Session = 컨텍스트.Session 서버 = select_server(cluster, ServerSelector.기본, Session) = Session&.고객&. || {} 만약 [:retry_writes] error_count = 0 error_to_raise = nil 시작 서버.with_connection(connection_global_id: 컨텍스트.connection_global_id) do |연결| yield 연결, nil, 컨텍스트 end 구출 오류::시간 초과 오류 올리다 구출 *retryable_exceptions, 오류::풀 오류, 오류::OperationFailure::패밀리 => e 만약 retryable_overload_error?(e) error_count += 1 error_to_raise ||= e 하지 않는 한 e.response_to?(:label?) && e.레이블?('NoWritesPerformed') error_to_raise = e end 지연 = retry_policy.backoff_delay(error_count) 올리다 error_to_raise 하지 않는 한 retry_policy.should_retry_overload?(error_count, 지연, 컨텍스트: 컨텍스트) log_retry(e, 메시지: '쓰기 재시도 (오버로드 백오프)') sleep(지연) 시작 서버 = select_server( cluster, ServerSelector.기본, Session, 서버, 오류: e, timeout: 컨텍스트.나머지_시간 초과_초 ) 구출 오류, 오류::AuthError => select_err error_to_raise.add_note("나중에 재시도 실패: #{select_err.클래스}: #{select_err}") 올리다 error_to_raise end 재시도 other e.add_note('재시도 비활성화') 올리다 e end end other legacy_write_with_retry(서버, 컨텍스트: 컨텍스트, &차단) end end |
#retry_write_allowed?(session, write_concern) ⇒ true | false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
세션 및 쓰기 고려가 쓰기 재시도를 지원하는지 여부를 쿼리합니다.
159 160 161 162 163 |
# 파일 'lib/ Mongo/retryable/write_Worker.rb', 줄 159 def retry_write_allowed?(Session, write_concern) 반환 거짓 하지 않는 한 Session&.retry_writes? write_concern.nil? || writeConcern.get(write_concern).인정? end |
#write_with_retry(write_concern, context:,ending_transaction: false, &block) {|connection, txn_num, context|... } ⇒ 결과
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이는 부분 쓰기가 아직 발생하지 않았음을 확신할 수 있는 유일한 경우이므로 마스터가 아닌 장애에서만 작업을 재시도합니다.
전달된 차단 에 한 번 이상 양보하여 쓰기 (write) 재시도 기능을 구현합니다.
세션이 제공되고(따라서 배포에서 세션을 지원함) 클라이언트에서 최신 재시도 쓰기가 활성화된 경우 최신 재시도 로직이 호출됩니다. 그렇지 않으면 레거시 재시도 로직이 호출됩니다.
end_transaction 매개 변수가 true(트랜잭션이 커밋 또는 중단 중임을 나타냅니다)인 경우 작업은 정확히 한 번 실행됩니다. 트랜잭션에는 세션이 필요하므로 종료_트랜잭션이 true이고 세션이 nil인 경우 이 메서드는 ArgumentError를 발생시킵니다.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# 파일 'lib/ Mongo/retryable/write_Worker.rb', 줄 63 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, timeout: 컨텍스트.나머지_시간 초과_초 ) 하지 않는 한 end_transaction || 서버.retry_writes? 반환 legacy_write_with_retry(서버, 컨텍스트: 컨텍스트, &차단) end Modern_write_with_retry(Session, 서버, 컨텍스트, &차단) end |