Módulo: Mongo::Retryable
- Estendido por:
- Encaminhável
- Incluído em:
- Cluster::CursorReaper, Collection, Collection::View::aggregation::Behavior, Collection::View::ChangeStream, Collection::View::MapReduce, Cursor, Banco de dados , Banco de dados::View , Index::View, SearchIndex: :Visualizar ,Servidor::Conexão , Sessão
- Definido em:
lib/mongo/retryable.rb, lib/mongo/retryable/base_worker.rb,
lib/mongo/retryable/read_worker.rb,
lib/mongo/retryable/backpressure.rb,
lib/mongo/retryable/retry_policy.rb,
lib/ mongo/retryable/write_worker.rb
Visão geral
Define o comportamento básico em torno da repetição de operações.
Definido sob namespace
Módulos: Backpressure Classes: BaseWorker, ReadWorker, RetryPolicy, WriteWorker
Recolhimento do Resumo do método de instância
-
#read_worker ➤ Objeto
privado
Retorna o trabalhador de leitura para lidar com leituras repetíveis.
-
#select_server(cluster, server_selector, sessão, failed_server = nil, error: nil, timeout: nil) ➤Mongo::Server
privado
Este é um método separado para possibilitar que o conjunto de testes afirme que a seleção do servidor é executada durante tentativas de repetição.
-
#with_overload_retry(context: nil, retry_enabled: true) ➤ Object
privado
Envolve uma operação com lógica de repetição de sobrecarga.
-
#write_worker ➤ Objeto
privado
Retorna o trabalhador de gravação para lidar com gravações repetíveis.
Detalhes do método de instância
#read_worker ➤ 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.
este é apenas um método público para que os testes possam adicionar expectativas com base nele.
Retorna o trabalhador de leitura para lidar com leituras repetíveis.
86 87 88 |
# Arquivo 'lib/mongo/retryable.rb', linha 86 def read_worker @read_worker ||= Read Worker.Novo(auto) end |
#select_server(cluster, server_selector, sessão, failed_server = nil, error: nil, timeout: nil) ➤Mongo::Server
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.
Este é um método separado para possibilitar que o conjunto de testes afirme que a seleção do servidor é executada durante tentativas de repetição.
Este é um método público para que ele possa ser acessado por meio dos delegados de trabalho de leitura e escrita, conforme necessário.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# Arquivo 'lib/mongo/retryable.rb', linha 49 def select_server(cluster, server_selector, session, failed_server = nada, erro: nada, timeout: nada) despriorizado = se failed_server && depriorize_server?(cluster, Erro) [ failed_server ] mais [] end server_selector.select_server( cluster, nada, session, despriorizado: despriorizado, timeout: timeout ) end |
#with_overload_retry(context: nil, retry_enabled: true) ➤ Object
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.
Envolve uma operação com lógica de repetição de sobrecarga. Em erros de sobrecarga (SystemOverloadedError + RetryableError), tenta novamente o bloco com backoff exponencial até MAX_RETRIES vezes.
O bloqueio deve incluir a seleção do servidor para que seja refeito na nova tentativa. Para operações de cursor (getMore), o mesmo servidor é reutilizado desde que o cursor esteja fixado.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# Arquivo 'lib/mongo/retryable.rb', linha 117 def with_overload_retry(contexto: nada, retry_enabled: true) Método rendimento a menos que retry_enabled error_count = 0 loop fazer Resultado = rendimento Método Resultado salvar Erro::Erro de tempo limite aumentar salvar Erro::Falha de operação::família => e aumentar e a menos que e.rótulo?('SystemOverloadedError') && e.rótulo?('RetryableError') error_count += 1 política = Cliente.retry_policy atrasar = política.backoff_delay(error_count) aumentar e a menos que política.should_retry_overload?(error_count, atrasar, contexto: Contexto) Logger.logger.AVISAR("Sobrecarregar nova tentativa devido a: #{e.classe.name}: #{e.}") sono(atrasar) end end |
#write_worker ➤ 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.
este é apenas um método público para que os testes possam adicionar expectativas com base nele.
Retorna o trabalhador de gravação para lidar com gravações repetíveis.
96 97 98 |
# Arquivo 'lib/mongo/retryable.rb', linha 96 def write_worker @write_worker ||= Write Worker.Novo(auto) end |