Classificação: Mongo::Cluster
- Herda:
-
Objeto
- Objeto
- Mongo::Cluster
- Estendido por:
- Encaminhável
- Definido em:
- build/ruby-driver-v2.19/lib/mongo/cluster.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/sdam_flow.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/base.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/single.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/sharded.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/unknown.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/p eriodic_executor.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/reapers/socket_reaper.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/load_balanced.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/no_replica_set_options.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/replica_set_no_primary.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology/replica_set_with_primary.rb
Visão geral
Copyright © 2018-2020 MongoDB Inc.
Licenciado sob a Licença Apache, Versão 2.0 (a "License"); você não pode usar este arquivo, exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou aceito por escrito, o software distribuído sob a Licença é distribuído “como está”, sem garantias ou condições de qualquer tipo, Express ou implícitas. Consulte a Licença para obter as permissões e limitações específicas de governo do idioma nos termos da Licença.
Definido sob namespace
Módulos: topologia Classes: CursorReaper, PeriodicExecutor, SdamFlow, SocketReaper
Colapsode resumo constante
- MAX_READ_RETRIES =
O número padrão de tentativas de leitura legadas.
1
- MAX_WRITE_RETRIES =
O número padrão de tentativas de gravação herdadas.
1
- READ_RETRY_INTERVAL =
O intervalo de repetição de leitura padrão, em segundos, ao usar novas tentativas de leitura legadas.
5
- IDLE_WRITE_PERIOD_SECONDS =
Com que frequência um primary ocioso grava um no-op no oplog.
10
- CLUSTER_TIME =
Obsoleto.
A chave de tempo do cluster em respostas de servidores mongos.
'clusterTime'.congelar
Constantes incluídas do Loggable
Recolhimento do Resumo do atributo de instância
-
#app_metadata ➤ Mongo::Server::AppMetadata
Somente leitura
Os metadados do aplicativo, usados para negociações de conexão.
- #monitor_app_metadata ➤ Objeto Somente leitura privado
-
#monitoramento ➤ Monitoramento
Somente leitura
Monitoramento O monitoramento.
-
#opções ➤ Hash
Somente leitura
O hash de opções.
- #push_monitor_app_metadata ➤ Objeto Somente leitura privado
-
#semente ➤ Array<String>
Somente leitura
privado
Os endereços dos servidores de sementes.
- #server_selection_semafore ➤ Objeto Somente leitura privado
- #session_pool ➤ Objeto Somente leitura
- #srv_monitor ➤ Objeto Somente leitura privado
-
#topology ➤ Inteiro?
Somente leitura
O valor lógico de tempo limite da sessão em minutos.
Atributos incluídos do Mongo::ClusterTime::Consumer
Atributos incluídos do Evento::Subscriber
Recolhimento do Resumo do método de classe
-
.create(cliente, monitoramento: nil) ➤ Cluster
privado
Criar um cluster para o cliente fornecido, para uso quando não quisermos que a instância do cluster original do cliente seja a mesma.
Recolhimento do Resumo do método de instância
-
#==(outro) ➤ verdadeiro, falso
Determine se esse cluster de servidores é igual a outro objeto.
-
#add(host, add_options = nil) ➤ MongoDB Server
Adicione um servidor ao cluster com o endereço fornecido.
-
# deendereços ➤ Array<Mongo::Address>
Os endereços no cluster.
-
#close ➤ nil
privado
Fecha o cluster.
-
#conectado? ➤ true|false
privado
Se o objeto de cluster está conectado ao seu cluster.
-
#conectando? ➤ true|false
privado
Se o objeto de cluster está em processo de conexão com seu cluster.
- #connected_server_if_connected(server) ➤ Objeto privado
-
#has_readable_server?(server_selector = nil) ➤ verdadeiro, falso
Determine se o cluster selecionaria um servidor legível para a preferência de leitura fornecida.
-
#has_writeable_server? ➤ verdadeiro, falso
Determine se o cluster selecionaria um servidor gravável.
-
#heartbeat_interval ➤ Flutuante
privado
Obtenha o intervalo de atualização do servidor.
-
#initialize(seeds, monitoramento, opções = Options::Redacted.new) ➤ Cluster
construtor
privado
Instancie o novo cluster.
-
#inspecionar ➤ string
Obtenha a string formatada melhor para uso na inspeção.
-
#load_balanced? ➤ verdadeiro | false
Retorna se o cluster está configurado para estar na topologia com balanceamento de carga.
- #max_read_retry ➤ Inteiro obsoleto Obsoleto.
-
#próximo_primary(ping = nil, session = nil) ➤ Mongo::Server
Obtenha o próximo servidor primário para o qual podemos enviar uma operação.
- #pool(server) ➤ Server::ConnectionPool obsoleto Obsoleto.
- #read_retry_interval ➤ Flutuante obsoleto Obsoleto.
-
#reconectar! ➤ verdadeiro
obsoleto
Obsoleto.
Use Client#reconnect para se reconectar ao cluster em vez de chamar esse método. Este método não envia eventos SDAM.
-
#remove(host, desconexão: true) ➤ Array<Server> | true | false
Remova o servidor do cluster para o endereço fornecido, se ele existir.
-
#run_sdam_flow(previous_desc, updated_desc, options = {}) ⇒ Object
privado
Executa o fluxo SDAM no cluster.
-
#scan!(sync = true) ➤ true
Forçar uma verificação de todos os servidores conhecidos no cluster.
-
#server ➤ Array<Server>
Obtenha uma lista de candidatos a servidor do cluster que podem ter operações executadas neles.
- #server_list ➤ Objeto privado
-
#set_server_list(server_address_strs) ➤ Objeto
privado
Define a lista de servidores para os endereços na lista fornecida de strings de endereços.
- #resumo ➤ Objeto
-
#update_cluster_time(result) ➤ Objeto
Atualize o tempo máximo de cluster visto em uma resposta.
- #update_topology(new_topology) ⇒ Object privado
-
#validate_session_support! ➤ Objeto
privado
Gera erro::SessionsNotAvailable se a implantação à qual o driver está conectado não oferecer suporte a sessões.
Métodos incluídos do Mongo::ClusterTime::Consumer
Métodos incluídos no Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger
Métodos incluídos do Event::Subscriber
Métodos incluídos do monitoramento::publicável
#publish_cmap_event, #publish_event, #publish_sdam_event
Detalhes do construtor
#initialize(seeds, monitoramento, opções = Options::Redacted.new) ➤ Cluster
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.
O cluster nunca deve ser instanciado diretamente fora de um cliente.
Ao se conectar a um URI mongodb+srv://, o cliente expande esse URI em uma lista de servidores e passa essa lista para o construtor de Cluster. Ao se conectar a um mongod autônomo , o construtor do Cluster recebe o endereço correspondente como uma array de uma string.
Instancie o novo cluster.
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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 120 def inicializar(sementes, Monitoramento, = Opções::Editado.Novo) se sementes.nada? aumentar ArgumentError, 'As sementes não podem ser nulas' end = .dup se [:monitoring_io] == false && !.chave?(:cleanup) [:cleanup] = false end @opções = .congelar # @update_lock abrange @servers, @connecting, @connected, @topology e # @sessions_supported. Geralmente, variáveis de instância que não têm um # O bloqueio designado para eles só deve ser modificado sob o bloqueio de atualização. # Observe que a alteração de topologia é bloqueada por @update_lock e não por # @sdam_flow_lock. @update_lock = Mutex.Novo @servidores = [] @monitoring = Monitoramento @event_listeners = Evento::ouvintes.Novo @app_metadata = Servidor::AppMetadata.Novo(@opções.mesclar(finalidade: : aplicação)) @monitor_app_metadata = Servidor::Monitorar::AppMetadata.Novo(@opções.mesclar(finalidade: :monitor)) @push_monitor_app_metadata = Servidor::Monitorar::AppMetadata.Novo(@opções.mesclar(finalidade: :push_monitor)) @cluster_time_lock = Mutex.Novo @cluster_time = nada @srv_monitor_lock = Mutex.Novo @srv_monitor = nada @server_selection_semafore = Semáforo.Novo @topology = topologia.inicial(auto, Monitoramento, ) # A bloqueio de alteração de estado é semelhante à trava de fluxo bloqueio, mas foi projetada # para serializar alterações de estado iniciadas pelos consumidores do cluster # (por exemplo aplicativo que está conectando ou desconectando o cluster), para que # por exemplo, um aplicação chamando desconectar-conectar-desconectar rapidamente # não coloca o cluster em um estado inconsistente. # As atualizações de monitoramento realizadas internamente pelo driver não levam # o bloqueio de alteração de estado. @state_change_lock = Mutex.Novo # @sdam_flow_lock abrange apenas o fluxo sdam. Observe que não se aplica # para substituições de topologia que são feitas em @update_lock. @sdam_flow_lock = Mutex.Novo Sessão::Pool de sessões.criar(auto) se sementes.vazio? && load_balanced? aumentar ArgumentError, 'Clusters com balanceamento de carga sem sementes são proibidos' end # A topologia de abertura é sempre desconhecida sem servidores. # https://github.com/mongodb/specifications/pull/388 Opening_topology = topologia::Desconhecido.Novo(, Monitoramento, auto) publish_sdam_event( Monitoramento::TOPOLOGY_OPENING, Monitoramento::Evento::Abertura de topologia.Novo(Opening_topology) ) @seeds = sementes = sementes.uniq Servidores = sementes.map fazer |Semente| # Os eventos de abertura do servidor MongoDB devem ser enviados após os eventos de alteração de topologia. # Portanto, adição de servidor separada, feita aqui antes da alteração de topologia # evento é publicado, desde o início do monitoramento do servidor que é # feito mais tarde. adicionar(Semente, monitorar: false) end se sementes.Tamanho >= 1 # Recriar a topologia para obter a lista de servidores atual nela recriar_topologia(topologia, Opening_topology) end se load_balanced? # As especificações exigem que produzamos determinados eventos SDAM # quando estiver em topologia com balanceamento de carga. # Esses eventos não fazem muito sentido do ponto de vista do implementação de SDAM do driver #, nem do ponto de vista do implementação do balanceador de carga do driver #. # Eles são apenas um código padrão necessário. # # Observe que esta chamada deve ser feita acima da verificação monitoring_io # porque isso causa um curto-circuito no resto do construtor. fabricate_lib_sdam_events_and_set_server_type end se [:monitoring_io] == false # Omitir a construção periódica de executores, porque sem servidores # nenhum comando pode ser enviado para o cluster e nunca deve # seja qualquer coisa que precise ser limpa. # # Omitir o monitoramento de servidores individuais e a rodada única herdada de # de SDAM na thread principal, pois ela correria com testes que simulam # Respostas SDAM. @connecting = @connected = false Método end # Atualizar variáveis de instância antes de iniciar threads de monitoramento. @connecting = false @connected = true se [:cleanup] != false @cursor_reaper = CursorReaper.Novo(auto) @socket_reaper = SocketReaper.Novo(auto) @periodic_executor = PeriodicExecutor.Novo([ @cursor_reaper, @socket_reaper, ], ) @periodic_executor.corra! end a menos que load_balanced? # É necessário registrar o tempo de início antes de iniciar o monitoramento start_monotime = Utilidades.monotonic_time Servidores.cada fazer |Servidor| Servidor.start_monitoring end se [:scan] != false server_selection_timeout = [:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT # O tempo limite de seleção do servidor pode ser muito curto, especialmente em # testes, quando o cliente aguarda uma verificação síncrona antes # iniciando a seleção do servidor . Limitando a verificação ao tempo de seleção do servidor # então cancela a verificação antes que ela possa processar até mesmo servidores locais. # Portanto, aguarde pelo menos 3 segundos para a verificação aqui. se server_selection_timeout < 3 server_selection_timeout = 3 end prazo = start_monotime + server_selection_timeout # Aguarde a conclusão da primeira verificação de cada servidor, para # compatibilidade com versões anteriores. # Se algum servidor for descoberto durante esta rodada de SDAM, vamos # espera que esses servidores também sejam consultados, e assim por diante, até o # timeout de seleção de servidor ou o mínimo de 3 segundos. loop fazer # Certifique-se de que não tentamos ler a lista de servidores enquanto o SDAM está em execução Servidores = @sdam_flow_lock.sincronizar fazer server_list.dup end se Servidores.todos? { |Servidor| Servidor.last_scan_monotime && Servidor.last_scan_monotime >= start_monotime } intervalo end se (time_remaining = prazo - Utilidades.monotonic_time) <= 0 intervalo end log_debug("Aguardando até #{'%.2f' % time_remaining} segundos para servidores a serem verificados: #{resumo}") # Como o semáforo pode ter sido sinalizado entre nós, verificando # a lista de servidores acima e a chamada de espera abaixo, não devemos # aguarde todo o tempo restante - aguarde até 0.5 segundo e, em seguida, # verifique novamente o estado. começar server_selection_semafore.esperar([time_remaining, 0.5].min) salvar ::Tempo-limite::Erro #nada end end end start_stop_srv_monitor end end |
Detalhes do atributo da instância
#app_metadata ➤ Mongo::Server::AppMetadata (readonly)
Retorna Os metadados do aplicativo, usados para negociações de conexão.
317 318 319 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 317 def @app_metadata end |
#monitor_app_metadata ➤ Object (somente leitura)
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.
320 321 322 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 320 def @monitor_app_metadata end |
#Monitoring ➤ Monitoramento (somente leitura)
Monitoramento de retornos O monitoramento.
308 309 310 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 308 def Monitoramento @monitoring end |
#opções ➤ Hash (somente leitura)
Retorna o hash de opções.
305 306 307 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 305 def @opções end |
#push_monitor_app_metadata ➤ Objeto (somente leitura)
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.
323 324 325 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 323 def @push_monitor_app_metadata end |
#seed s Array<String> (somente leitura)
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 Os endereços dos servidores de sementes. Contém endereços que foram fornecidos ao cluster quando ele foi instanciado, não endereços atuais que o cluster está usando como resultado do SDAM.
331 332 333 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 331 def sementes @seeds end |
#server_selection_semafore ➤ Objeto (somente leitura)
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.
488 489 490 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 488 def server_selection_semafore @server_selection_semafore end |
#session_pool ➤ Objeto (somente leitura)
336 337 338 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 336 def session_pool @session_pool end |
#srv_monitor ➤ Object (somente leitura)
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.
358 359 360 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 358 def srv_monitor @srv_monitor end |
#topology ➤ Inteiro? (somente leitura)
O valor lógico de tempo limite da sessão em minutos.
311 312 313 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 311 def topologia @topology end |
Detalhes do método de classe
.create(cliente, monitoramento: nil) ➤ Cluster
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.
Criar um cluster para o cliente fornecido, para uso quando não quisermos que a instância do cluster original do cliente seja a mesma.
295 296 297 298 299 300 301 302 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 295 def auto.criar(Cliente, monitoramento: nada) cluster = cluster.Novo( Cliente.cluster.Endereços.map(&:to_s), Monitoramento || Monitoramento.Novo, Cliente., ) Cliente.instance_variable_set(:@cluster, cluster) end |
Detalhes do método de instância
#==(outro) ➤ true, false
Determine se esse cluster de servidores é igual a outro objeto. Verifica os servidores atualmente no cluster, não o que foi configurado.
738 739 740 741 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 738 def ==(Outro) Método false a menos que Outro.is_a?(cluster) Endereços == Outro.Endereços && == Outro. end |
#add(host, add_options = nil) ➤ MongoDB Server
Adicione um servidor ao cluster com o endereço fornecido. Útil na descoberta automática de novos servidores quando um servidor existente executa um hello e servidores potencialmente não configurados foram incluídos.
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 836 def adicionar(Anfitrião, =nada) endereço = endereço.Novo(Anfitrião, ) se !Endereços.incluir?(endereço) opciona = .mesclar(monitorar: false) # Se não estivermos iniciando os threads de monitoramento, também não queremos # iniciar a thread de preenchimento do pool. opciona.mesclar!(populator_io: false) a menos que .buscar(:monitoring_io, true) # Observe que em uma topologia com balanceamento de carga, cada servidor deve ser um # balanceador de carga (load_balancer: true é especificado nas opções) # mas esta opção não está definida aqui porque somos exigidos pelo # especificações para presumir que o servidor começou como desconhecido # e publicar o evento de alteração da descrição do servidor no balanceador de carga # um. A descrição correta real para este servidor será definida # pelo fabricate_lib_sdam_events_and_set_server_type. Servidor = Servidor.Novo(endereço, auto, @monitoring, event_listeners, opciona) @update_lock.sincronizar fazer # É necessário verificar novamente se o servidor está presente em @servidores, porque # a verificação anterior não estava bloqueada. # Como estamos sob o bloqueio de atualização aqui, não podemos chamar server_list. Método se @servidores.map(&:address).incluir?(endereço) @servidores.push(Servidor) end se .nada? || [:monitor] != false Servidor.start_monitoring end Servidor end end |
# deendereços ➤ Array<Mongo::Endereço>
Os endereços no cluster.
451 452 453 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 451 def Endereços server_list.map(&:address) end |
#close ➤ nil
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.
Os aplicativos devem ligar para o Client#close para se desconectar do
Fecha o cluster.
o cluster em vez de chamar esse método. Este método é somente para uso interno do driver.
Desconecta todos os servidores no cluster, publicando eventos SDAM apropriados no processo. Interrompe o monitoramento SRV se ele estiver ativo. Marca o cluster desconectado.
Um cluster fechado não pode mais ser usado. Se o cliente for reconectado, ele criará uma nova instância de cluster.
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 506 def Fechar @state_change_lock.sincronizar fazer a menos que conectando? || conectado? Método nada end se [:cleanup] != false session_pool.end_sessions @periodic_executor.pare! end @srv_monitor_lock.sincronizar fazer se @srv_monitor @srv_monitor.pare! end end @servidores.cada fazer |Servidor| se Servidor.conectado? Servidor.Fechar publish_sdam_event( Monitoramento::SERVER_Closed, Monitoramento::Evento::Servidor fechado.Novo(Servidor.endereço, topologia) ) end end publish_sdam_event( Monitoramento::Topology_Closed, Monitoramento::Evento::Topologia fechada.Novo(topologia) ) @update_lock.sincronizar fazer @connecting = @connected = false end end nada end |
#conectado? ➤ 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.
Se o objeto de cluster está conectado ao seu cluster.
424 425 426 427 428 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 424 def conectado? @update_lock.sincronizar fazer !!@connected end end |
#conectando? ➤ 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.
Se o objeto de cluster está em processo de conexão com seu cluster.
412 413 414 415 416 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 412 def conectando? @update_lock.sincronizar fazer !!@connecting end end |
#connected_server_if_connected(server) ➤ 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.
944 945 946 947 948 949 950 951 952 953 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 944 def connect_server_if_connected(Servidor) se Servidor.conectado? Servidor.clear_description Servidor.desconecte-se! publish_sdam_event( Monitoramento::SERVER_Closed, Monitoramento::Evento::Servidor fechado.Novo(Servidor.endereço, topologia) ) end end |
#has_readable_server?(server_selector = nil) ➤ true, false
Determine se o cluster selecionaria um servidor legível para a preferência de leitura fornecida.
755 756 757 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 755 def has_readable_server?(server_selector = nada) topologia.has_readable_server?(auto, server_selector) end |
#has_writeable_server? ➤ true, false
Determine se o cluster selecionaria um servidor gravável.
767 768 769 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 767 def has_writeable_server? topologia.has_writeable_server?(auto) end |
#heartbeat_interval ➤ Flutuante
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.
Obtenha o intervalo de atualização do servidor. Isso será definido por meio de uma opção ou será padronizado como 10.
403 404 405 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 403 def heartbeat_interval [: heartbeat_frequency] || Servidor::Monitorar::DEFAULT_HEARTBEAD_INTERVAL end |
#inspecionar ➤ string
Obtenha a string formatada melhor para uso na inspeção.
473 474 475 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 473 def inspecionar "#<Mongo::Cluster:0x#{object_id} servidores=#{servidores} topology=#{topologia.resumo}>" end |
#load_balanced? ➤ verdadeiro | false
Retorna se o cluster está configurado para estar na topologia com balanceamento de carga.
345 346 347 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 345 def load_balanced? topologia.is_a?(topologia::loadBalanced) end |
#max_read_retry ➤ Inteiro
max_read_retries devem ser recuperados da instância do cliente e não de uma instância do cluster, pois os clusters podem ser compartilhados entre clientes com valores diferentes para tentativas máximas de leitura.
Obtenha o número máximo de vezes que o cliente pode tentar novamente uma operação de leitura ao usar novas tentativas de leitura legado .
374 375 376 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 374 def max_read_retry [:max_read_retry] || MAX_READ_RETRIES end |
#próximo_primary(ping = nil, session = nil) ➤ Mongo::Server
Obtenha o próximo servidor primário para o qual podemos enviar uma operação.
784 785 786 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 784 def próximo_primary(Ping = nada, session = nada) ServerSelector.Principal.select_server(auto, nada, session) end |
#pool(servidor) ➤ Server::ConnectionPool
Obtenha o pool de conexões do servidor.
799 800 801 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 799 def pool(Servidor) Servidor.pool end |
#read_retry_interval ➤ Flutuante
read_retry_interval deve ser recuperado da instância do cliente e não de uma instância do cluster, pois os clusters podem ser compartilhados entre clientes com valores diferentes para o intervalo de repetição de leitura.
Obtenha o intervalo, em segundos, em que as tentativas de leitura ao usar tentativas de leitura herdadas.
392 393 394 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 392 def read_retry_interval [:read_retry_interval] || READ_RETRY_INTERVAL end |
#reconectar! ➤ verdadeiro
Use Client#reconnect para se reconectar ao cluster em vez de chamar esse método. Este método não envia eventos SDAM.
Reconecte todos os servidores.
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 550 def reconecte-se! @state_change_lock.sincronizar fazer @update_lock.sincronizar fazer @connecting = true end digitalizar! Servidores.cada fazer |Servidor| Servidor.reconecte-se! end @periodic_executor.reinicie! @srv_monitor_lock.sincronizar fazer se @srv_monitor @srv_monitor.corra! end end @update_lock.sincronizar fazer @connecting = false @connected = true end end end |
#remove(host, desconexão: true) ➤ Array{Server> | true | false
O valor de retorno deste método não faz parte da API pública do driver.
Remova o servidor do cluster para o endereço fornecido, se ele existir.
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 885 def remover(Anfitrião, desconectar: true) endereço = endereço.Novo(Anfitrião) removeu_servers = [] @update_lock.sincronizar fazer @servidores.delete_if fazer |Servidor| (Servidor.endereço == endereço).toque fazer |excluir| se excluir removeu_servers << Servidor end end end end se Desconectar != false removeu_servers.cada fazer |Servidor| connect_server_if_connected(Servidor) end end se Desconectar != false removeu_servers.algum? mais removeu_servers end end |
#run_sdam_flow(previous_desc, updated_desc, options = {}) ⇒ 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.
Executa o fluxo SDAM no cluster.
Esse método pode ser invocado para processar uma nova descrição de servidor retornada pelo servidor em uma conexão monitorada ou não monitorada e também pelo driver quando ele marca um servidor desconhecido como resultado de um erro (rede).
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 636 def run_sdam_flow(anterior_desc, updated_desc, = {}) se load_balanced? se updated_desc.config.vazio? a menos que [:keeper_connection_pool] server_list.cada fazer |Servidor| # TODO deve ser retirado o ID do serviço updated_desc? # Também podemos afirmar que # options[:service_id] == updated_desc.service_id err = [:scan_error] interromper = err && (err.is_a?(Erro::Erro de soquete) || err.is_a?(Erro::SocketTimeoutError)) Servidor.clear_connection_pool(service_id: [:service_id], interrupt_in_use_connections: interromper) end end end Método end @sdam_flow_lock.sincronizar fazer fluxo = SdamFlow.Novo(auto, anterior_desc, updated_desc, esperado: [:waited]) fluxo.server_description_changed # O fluxo de SDAM pode alterar a descrição atualizada - pegue a final # versão para fins de transmissão se um servidor estiver disponível updated_desc = fluxo.updated_desc a menos que [:keeper_connection_pool] se fluxo.tornou-se_unknown? server_list.cada fazer |Servidor| se Servidor.endereço == updated_desc.endereço err = [:scan_error] interromper = err && (err.is_a?(Erro::Erro de soquete) || err.is_a?(Erro::SocketTimeoutError)) Servidor.clear_connection_pool(interrupt_in_use_connections: interromper) end end end end start_stop_srv_monitor end # Algumas descrições atualizadas, por exemplo, uma que não corresponde a nós, resultam no # servidor cuja descrição estamos processando sendo removida # a topologia. Quando isso acontece, o thread de monitoramento do servidor fica # morto. Como resultado, qualquer código após a invocação de fluxo pode não ser executado # uma instância de monitor específica; portanto, geralmente não deve haver # qualquer código neste método após a invocação de fluxo. # # No entanto, essa chamada de transmissão pode estar aqui porque, se o monitoramento # thread foi eliminado, o servidor deveria ter sido fechado e nenhum cliente # deve estar esperando por ele, não sinalizando assim o semáforo # não deve causar problemas. a menos que updated_desc.desconhecido? server_selection_semafore.transmissão end end |
#scan!(sync = true) ➤ true
Em verificações síncronas e assíncronas, cada thread de monitor mantém um intervalo mínimo entre as verificações, o que significa que chamar esse método pode não iniciar uma verificação em um servidor específico no instante seguinte.
Forçar uma verificação de todos os servidores conhecidos no cluster.
Se o parâmetro de sincronização for verdadeiro, que é o padrão, a verificação será executada de forma síncrona no thread que chamou esse método. Cada servidor no cluster é verificado sequencialmente. Se houver muitos servidores no cluster ou se eles demorarem para responder, essa pode ser uma operação de longa duração.
Se o parâmetro sync for falso, esse método instruirá todos os threads do monitor de servidor a executar uma verificação imediata e retornará sem aguardar os resultados da verificação.
595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 595 def digitalizar!(sincronizar=true) se sincronizar server_list.cada fazer |Servidor| se Servidor.monitorar Servidor.monitorar.digitalizar! mais log_service("A verificação síncrona solicitada no cluster #{resumo} mas o servidor #{servidor} não tem monitor") end end mais server_list.cada fazer |Servidor| Servidor.varredura_semafore.sinal end end true end |
#servidores ➤ Array <Servidor MongoDB>
Obtenha uma lista de candidatos a servidor do cluster que podem ter operações executadas neles.
439 440 441 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 439 def Servidores topologia.Servidores(server_list) end |
#server_list ➤ 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.
937 938 939 940 941 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 937 def server_list @update_lock.sincronizar fazer @servidores.dup end end |
#set_server_list(server_address_strs) ➤ 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.
Define a lista de servidores para os endereços na lista fornecida de strings de endereços.
Este método é chamado pelo monitor SRV após receber novos registros DNS para o nome de host monitorado.
Remove servidores no cluster cujos endereços não estão na lista passada de endereços de servidor e adiciona servidores para quaisquer endereços no argumento que ainda não estejam no cluster.
707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 707 def set_server_list(server_address_strs) @sdam_flow_lock.sincronizar fazer # Se um dos novos endereços não estiver na lista de servidores atual, # adicione-o à lista de servidores. server_address_strs.cada fazer |endereço_str| a menos que server_list.algum? { |Servidor| Servidor.endereço.Semente == endereço_str } adicionar(endereço_str) end end # Se um dos endereços do servidor não estiver na nova lista de endereços, # remova esse servidor da lista de servidores. server_list.cada fazer |Servidor| a menos que server_address_strs.algum? { |endereço_str| Servidor.endereço.Semente == endereço_str } remover(Servidor.endereço.Semente) end end end end |
#resumo ➤ Objeto
Este método é experimental e sujeito a alterações.
481 482 483 484 485 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 481 def Resumo "#<Cluster " + "topology=#{topologia.resumo} "+ "server=[#{server_list.map(&:summary).join(',')}]>" end |
#update_cluster_time(result) ➤ Objeto
Atualize o tempo máximo de cluster visto em uma resposta.
813 814 815 816 817 818 819 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 813 def update_cluster_time(Resultado) se cluster_time_doc = Resultado.cluster_time @cluster_time_lock.sincronizar fazer advanced_cluster_time(cluster_time_doc) end end end |
#update_topology(new_topology) ➤ 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.
910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 910 def update_topology(new_topology) old_topology = nada @update_lock.sincronizar fazer old_topology = topologia @topology = new_topology end # Se a nova topologia tiver servidores com dados, saberemos com certeza se # sessões são suportadas - atualize nosso valor em cache. # Se a nova topologia não tiver servidores portadores de dados, deixe o valor antigo # como está e session_supported? o método executará a seleção do servidor # para tentar determinar o suporte da sessão com precisão, retornando ao # último valor conhecido. se topologia.data_Bearing_Servers? Sessions_supported = !!topologia.logical_session_timeout @update_lock.sincronizar fazer @sessions_supported = Sessions_supported end end publish_sdam_event( Monitoramento::TOPOLOGY_CHANGED, Monitoramento::Evento::Topologia alterada.Novo(old_topology, topologia) ) end |
#validate_session_support! ➤ 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.
Gera erro::SessionsNotAvailable se a implantação à qual o driver está conectado não oferecer suporte a sessões.
O suporte à sessão pode mudar com o tempo, por exemplo, devido à atualização ou desatualização dos servidores no sistema. Se o cliente não estiver conectado a nenhum servidor e não encontrar nenhum servidor durante o tempo limite de seleção do servidor, esse método gerará NoServerAvailable. Esse método é chamado a partir do fluxo de execução da operação e, se ele gerar NoServerAvailable, toda a operação falhará com essa exceção, pois a execução da operação esperou o tempo limite de seleção do servidor para que qualquer servidor fique disponível (que seria um superconjunto dos servidores adequado para a operação que está sendo tentada) e nenhum materializado.
976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 |
# File 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', linha 976 def validate_session_support! se topologia.is_a?(topologia::loadBalanced) Método end @state_change_lock.sincronizar fazer @sdam_flow_lock.sincronizar fazer se topologia.data_Bearing_Servers? a menos que topologia.logical_session_timeout create_sessions_not_supported end end end end # Nenhum servidor portador de dados conhecido - realize a seleção do servidor para tentar # obtenha uma resposta de pelo menos um deles, para retornar uma resposta precisa # avaliação sobre se as sessões são atualmente suportadas. ServerSelector.obter(modo: :primary_preferred).select_server(auto) @state_change_lock.sincronizar fazer @sdam_flow_lock.sincronizar fazer a menos que topologia.logical_session_timeout create_sessions_not_supported end end end end |