Classe: Mongo::ServerSelector::Base
- Herda:
-
Objeto
- Objeto
- Mongo::ServerSelector::Base
- Definido em:
- build/ruby-driver-v2.19/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) ➤ 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) ➤ 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) ➤ Array<Server>
privado
Retorna servidores que satisfazem o seletor de servidor do cluster.
-
#try_select_server(cluster, write_aggregation: false) ➤ 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.
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 49 def inicializar( = nada) = ? .dup : {} se [:max_staleness] == -1 .excluir(:max_staleness) end @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.
76 77 78 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 76 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.
72 73 74 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 72 def max_staleness @max_staleness end |
#opções ➤ Hash (somente leitura)
Retorna as opções As opções.
63 64 65 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 63 def @opções end |
#tag_sets ➤ Array (somente leitura)
Retorna tag_sets Os conjuntos de tags usados para selecionar servidores.
66 67 68 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 66 def tag_sets @tag_sets end |
Detalhes do método de instância
#==(outro) ➤ true, false
Verifique a igualdade de dois seletores de servidor .
136 137 138 139 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 136 def ==(Outro) name == Outro.name && sebe == Outro.sebe && max_staleness == Outro.max_staleness && tag_sets == Outro.tag_sets end |
#candidatos(cluster) ➤ Array <Servidor MongoDB>
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.
379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 379 def candidatos(cluster) Servidores = cluster.Servidores Servidores.cada fazer |Servidor| validate_max_staleness_support!(Servidor) end 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.
122 123 124 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 122 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.
105 106 107 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 105 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.
110 111 112 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 110 def local_threshold_with_cluster(cluster) [:local_threshold] || cluster.[:local_threshold] || Local_threshold end |
#select_server(cluster, ping = nil, session = nil, write_aggregation: false) ➤ 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.
177 178 179 180 181 182 183 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 177 def select_server(cluster, Ping = nada, session = nada, write_aggregation: false) select_server_impl(cluster, Ping, session, write_aggregation).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 .
89 90 91 92 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 89 def server_selection_timeout @server_selection_timeout ||= ([:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT) end |
#adequado_servers(cluster) ➤ Array<Servidor>
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.
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 403 def adequado_servidores(cluster) se cluster.único? candidatos(cluster) elsif cluster.fragmentado? local_threshold = local_threshold_with_cluster(cluster) Servidores = candidatos(cluster) near_servers(Servidores, local_threshold) elsif cluster.replica_set? validate_max_staleness_value!(cluster) candidatos(cluster) mais # Cluster desconhecido - sem servidores [] end end |
#try_select_server(cluster, write_aggregation: false) ➤ Servidor MongoDB | 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.
328 329 330 331 332 333 334 335 336 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 |
# File 'build/ruby-driver-v2.19/lib/mongo/server_selector/base.rb', linha 328 def try_select_server(cluster, write_aggregation: false) 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) mais # 3. Caso contrário, voltamos ao primário para o conjunto de réplicas. [cluster.Servidores.detectar(&:primary?)] end mais adequado_servidores(cluster) 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 = Servidores.primeiro se Servidor se Lint.habilitado? # É 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. se Servidor.average_round_trip_time.nada? aumentar Erro::LintError, "Servidor MongoDB #{server.endereço} tem nil average rtt" end end end Servidor end |