Classe: Mongo::Retryable::WriteWorker Private
- Herda:
-
Baseworker
- Objeto
- Baseworker
- Mongo::Retryable::WriteWorker
- Definido em:
- build/ruby-driver-v2.19/lib/mongo/retryable/write_worker.rb
Visão geral
Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.
Implementa a lógica em torno da repetição de operações de gravação.
Resumo do atributo de instância
Atributos herdados do BaseWorker
Recolhimento do Resumo do método de instância
-
#nro_write_with_retry(write_concern, context:) {|connection, txn_num, context| ... } ➤ Objeto
privado
Encapsulador de retryable wrapper para operações que não oferecem suporte a retryable writes modernos.
-
#retry_write_allowed?(sessão, write_concern) ➤ true | false
privado
Consulta se a sessão e a preocupação com a gravação suportam a repetição de gravações.
-
#write_with_retry(write_concern, endpoint_transaction: false, context:, &block) {|connection, txn_num, context| ... } ➤ Resultado
privado
Implementa a funcionalidade de repetição de gravação cedendo ao bloco passado uma ou mais vezes.
Métodos herdados do BaseWorker
Detalhes do construtor
Esta classe herda um construtor de Mongo::Retryable::BaseWorker
Detalhes do método de instância
#nro_write_with_retry(write_concern, context:) {|connection, txn_num, context| ... } ➤ Objeto
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Encapsulador de retryable wrapper para operações que não oferecem suporte a retryable writes modernos.
Se o driver estiver configurado para usar gravações modernas que podem ser repetidas, esse método produzirá o bloco passado exatamente uma vez, portanto, não tentará novamente nenhuma gravação.
Se o driver estiver configurado para usar gravações legado repetíveis, esse método delegará para legacy_write_with_retry que executará novas tentativas de gravação usando lógica legado .
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'build/ruby-driver-v2.19/lib/mongo/retryable/write_worker.rb', linha 103 def nro_write_with_retry(write_concern, contexto:, &noum: bloco ; verb: bloquear) session = Contexto.session Servidor = select_server(cluster, ServerSelector.Principal, session) se session&.Cliente.[:retry_writes] começar Servidor.with_connection(connection_global_id: Contexto.connection_global_id) fazer |Conexão| rendimento Conexão, nada, Contexto end salvar *retryable_exceptions, Erro::PoolError, Erro::Falha de operação => e e.add_note('novas tentativas desabilitadas') aumentar e end mais legacy_write_with_retry(Servidor, contexto: Contexto, &noum: bloco ; verb: bloquear) end end |
#retry_write_allowed?(sessão, write_concern) ➤ true | false
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Consulta se a sessão e a preocupação com a gravação suportam a repetição de gravações.
129 130 131 132 133 134 135 136 137 |
# File 'build/ruby-driver-v2.19/lib/mongo/retryable/write_worker.rb', linha 129 def retry_write_allowed?(session, write_concern) Método false a menos que session&.retry_writes? se write_concern.nada? true mais Escreva preocupação.obter(write_concern).reconhecido? end end |
#write_with_retry(write_concern, endpoint_transaction: false, context:, &block) {|connection, txn_num, context| ... } ➤ Resultado
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Isso só repete operações em falhas de mestre, pois é o único caso em que podemos ter certeza de que uma escrita parcial ainda não ocorreu.
Implementa a funcionalidade de repetição de gravação cedendo ao bloco passado uma ou mais vezes.
Se a sessão for fornecida (portanto, o sistema suporta sessões) e as escritas de novas tentativas estiverem habilitadas no cliente, a lógica de novas tentativas será invocada. Caso contrário, a lógica de repetição herdada será invocada.
Se o parâmetro endpoint_transaction for verdadeiro, indicando que uma transação está sendo confirmada ou cancelada, a operação será executada exatamente uma vez. Observe que, como as transações exigem sessões, esse método aumentará o ArgumentError se endpoint_transaction for verdadeiro e a sessão for nula.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'build/ruby-driver-v2.19/lib/mongo/retryable/write_worker.rb', linha 65 def write_with_retry(write_concern, endpoint_transaction: false, contexto:, &noum: bloco ; verb: bloquear) session = Contexto.session ensure_valid_state!(endpoint_transaction, session) a menos que endpoint_transaction || retry_write_allowed?(session, write_concern) Método legacy_write_with_retry(nada, contexto: Contexto, &noum: bloco ; verb: bloquear) end # Se estivermos aqui, a sessão não é nula. Uma sessão sendo nula teria # failed retry_write_allowed? verificar. Servidor = select_server(cluster, ServerSelector.Principal, session) a menos que endpoint_transaction || Servidor.retry_writes? Método legacy_write_with_retry(Servidor, contexto: Contexto, &noum: bloco ; verb: bloquear) end mod_write_with_retry(session, Servidor, Contexto, &noum: bloco ; verb: bloquear) end |