Classe: Mongo::ServerSelector::Base
- Herda:
-
Objeto
- Objeto
- Mongo::ServerSelector::Base
- Definido em:
- lib/mongo/server_selector/base.rb
Visão geral
Subclasses conhecidas diretas
Mais próximo, Primário, PrimaryPreferred, Secundário, SecundárioPreferred
Recolhimento do Resumo do atributo de instância
-
#hedge ⇒ Hash | nil
Somente leitura
hedge O documento especificando se deseja habilitar leituras protegidas.
-
#max_staleness ⇒ Integer
Somente leitura
Max_staleness O atraso de replicação, em segundos, que um secundário pode sofrer e ainda ser elegível para uma leitura.
-
#opções ➤ Hash
Somente leitura
Opções As opções.
-
#tag_sets ➤ Array
Somente leitura
Tag_sets Os conjuntos de tags usados para selecionar servidores.
Recolhimento do Resumo do método de instância
-
#==(outro) ➤ verdadeiro, falso
Verifique a igualdade de dois seletores de servidor .
-
#candidatos(cluster, despriorizado = []) ➤ Array<Server>
privado
Retorna servidores de tipos aceitáveis do cluster.
-
#initialize(options = nil) ⇒ Base
construtor
privado
Inicialize o seletor de servidor.
-
#inspecionar ➤ string
Inspecione o seletor de servidor.
-
#local_threshold ➤ Flutuante
obsoleto
Obsoleto.
Essa configuração agora é retirada das opções de cluster quando um servidor é selecionado. Será removido na versão 3.0.
- #local_threshold_with_cluster(cluster) ➤ Objeto privado
-
#select_server(cluster, ping = nil, session = nil, write_aggregation: false, depriorized: [], timeout: nil) ➤ Mongo::Server
Selecione um servidor no cluster especificado, levando em conta a fixação do mongos para a sessão especificada.
-
#server_selection_timeout ➤ Flutuante
obsoleto
Obsoleto.
Essa configuração agora é retirada das opções de cluster quando um servidor é selecionado. Será removido na versão 3.0.
-
#adequado_servers(cluster, deprioritized = []) ➤ Array<Server>
privado
Retorna servidores que satisfazem o seletor de servidor do cluster.
-
#try_select_server(cluster, write_aggregation: false, despriorizado: []) ➤ ➤ Servidor | nada
privado
Tenta encontrar um servidor adequado , retorna o servidor se houver um disponível ou nulo se não houver um servidor adequado .
Detalhes do construtor
#initialize(options = nil) ⇒ Base
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.
Inicialize o seletor de servidor.
45 46 47 48 49 50 51 52 53 54 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 45 def inicializar( = nada) = ? .dup : {} .excluir(:max_staleness) se [:max_staleness] == -1 @opções = @tag_sets = [:tag_sets] || [] @max_staleness = [:max_staleness] @hedge = [:hedge] validar! end |
Detalhes do atributo da instância
#hedge ➤ Hash | nil (somente leitura)
Retorna hedge O documento que especifica se deve permitir leituras com hedge.
70 71 72 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 70 def sebe @hedge end |
#max_staleness ➤ inteiro (somente leitura)
Retorna max_staleness O atraso de replicação, em segundos, que um secundário pode sofrer e ainda ser elegível para uma leitura.
66 67 68 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 66 def max_staleness @max_staleness end |
#opções ➤ Hash (somente leitura)
Retorna as opções As opções.
57 58 59 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 57 def @opções end |
#tag_sets ➤ Array (somente leitura)
Retorna tag_sets Os conjuntos de tags usados para selecionar servidores.
60 61 62 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 60 def tag_sets @tag_sets end |
Detalhes do método de instância
#==(outro) ➤ true, false
Verifique a igualdade de dois seletores de servidor .
130 131 132 133 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 130 def ==(Outro) name == Outro.name && sebe == Outro.sebe && max_staleness == Outro.max_staleness && tag_sets == Outro.tag_sets end |
#candidatos(cluster, despriorizado = []) ➤ Array
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.
Retorna servidores de tipos aceitáveis do cluster.
Não executa validação de obsolescência, filtragem de obsolescência ou filtragem de latência.
386 387 388 389 390 391 392 393 394 395 396 397 398 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 386 def candidatos(cluster, despriorizado = []) Servidores = cluster.Servidores.rejeitar { |s| despriorizado.incluir?(s) } se cluster.único? Servidores elsif cluster.fragmentado? Servidores elsif cluster.replica_set? select_in_replica_set(Servidores) mais # Cluster desconhecido - sem servidores [] end end |
#inspecionar ➤ string
Inspecione o seletor de servidor.
116 117 118 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 116 def inspecionar "#<#{self.class.name}:0x#{object_id} tag_sets=#{tag_sets.inspect} max_staleness=#{max_staleness.inspect} hedge=#{hedge}>" end |
#local_threshold ➤ Flutuante
Essa configuração agora é retirada das opções de cluster quando um servidor é selecionado. Será removido na versão 3.0.
Obtenha o limite local para a seleção mais próxima em segundos.
99 100 101 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 99 def local_threshold @local_threshold ||= [:local_threshold] || ServerSelector::Local_threshold end |
#local_threshold_with_cluster(cluster) ➤ 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.
104 105 106 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 104 def local_threshold_with_cluster(cluster) [:local_threshold] || cluster.[:local_threshold] || Local_threshold end |
#select_server(cluster, ping = nil, session = nil, write_aggregation: false, depriorized: [], timeout: nil) ➤ Mongo::Server
Selecione um servidor no cluster especificado, levando em conta a fixação do mongos para a sessão especificada.
Se a sessão for fornecida e tiver um servidor fixado, esse servidor será o único servidor considerado para seleção. Se o servidor for do tipo mongos, ele será retornado imediatamente; caso contrário, as verificações de monitoramento nesse servidor são iniciadas para atualizar seu status e, se o servidor se tornar um mongos dentro do tempo limite de seleção do servidor , ele será retornado.
Se nenhuma sessão for fornecida ou se a sessão não tiver um servidor fixado , o processo normal de seleção de servidor será executado entre todos os servidores no cluster especificado que corresponderem à preferência desse objeto seletor de servidor . As verificações de monitoramento são iniciadas nos servidores do cluster até que um servidor adequado seja encontrado, até o tempo limite de seleção do servidor .
Se um servidor adequado não for encontrado dentro do tempo limite de seleção do servidor, esse método gerará o Erro::NoServerAvailable.
176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 176 def select_server( cluster, Ping = nada, session = nada, write_aggregation: false, despriorizado: [], timeout: nada ) select_server_impl(cluster, Ping, session, write_aggregation, despriorizado, timeout).toque fazer |Servidor| se Lint.habilitado? && !Servidor.pool.pronto? aumentar Erro::LintError, 'O seletor de servidor retorna um servidor com um pool que não está pronto' end end end |
#server_selection_timeout ➤ Flutuante
Essa configuração agora é retirada das opções de cluster quando um servidor é selecionado. Será removido na versão 3.0.
Obtenha o tempo limite para a seleção do servidor .
83 84 85 86 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 83 def server_selection_timeout @server_selection_timeout ||= [:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT end |
#adequado_servers(cluster, depriorized = []) ➤ Array
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.
Retorna servidores que satisfazem o seletor de servidor do cluster.
409 410 411 412 413 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 409 def adequado_servidores(cluster, despriorizado = []) Resultado = adequado_servers_impl(cluster, despriorizado) Resultado = adequado_servers_impl(cluster, []) se Resultado.vazio? && despriorizado.algum? Resultado end |
#try_select_server(cluster, write_aggregation: false, despriorizado: []) ➤ ➤ Servidor | nada
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.
Tenta encontrar um servidor adequado , retorna o servidor se houver um disponível ou nulo se não houver um servidor adequado .
337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 |
# Arquivo 'lib/mongo/server_selector/base.rb', linha 337 def try_select_server(cluster, write_aggregation: false, despriorizado: []) Servidores = se write_aggregation && cluster.replica_set? # 1. Verifique se todos os servidores no cluster oferecem suporte a gravações secundárias. is_write_supported = cluster.Servidores.reduzir(true) fazer |res, Servidor| res && Servidor.características.mesclar_out_on_secondary_enabled? end se is_write_supported # 2. Se todos os servidores permitirem gravações secundárias, respeitaremos a preferência de leitura. adequado_servidores(cluster, despriorizado) mais # 3. Caso contrário, voltamos ao primário para o conjunto de réplicas. [ cluster.Servidores.detectar(&:primary?) ] end mais adequado_servidores(cluster, despriorizado) end # Esta lista de servidores pode ser ordenada de forma específica # pelo seletor (por exemplo, para preferencial secundário, o primeiro #servidor pode ser secundário e o segundo servidor pode ser primário) # e devemos pegar o primeiro servidor aqui respeitando a ordem Servidor = adequado_server(Servidores) se Servidor && Lint.habilitado? && Servidor.average_round_trip_time.nada? # É possível para um servidor ter um RTT médio nulo aqui # porque o artt vem da descrição que pode ser atualizada # por um thread em background enquanto a seleção do servidor está em execução. # Atualmente, o modo lint não é um recurso público, se/quando isso # de alterações (https://jira.mongodb.org/browse/RUBY-{01576) o # requisito para que oARTT não seja nulo precisaria ser removido. aumentar Erro::LintError, "Servidor MongoDB #{server.endereço} tem nil average rtt" end Servidor end |