Classificação: Mongo::Servidor

Herda:
Objeto
  • Objeto
mostrar tudo
Estendido por:
Encaminhável
Inclui:
Evento::editor, monitoramento::publicável
Definido em:
lib/mongo/ servidor.rb,
lib/mongo/ servidor/monitor.rb,
lib/mongo/ servidor/connection.rb,
lib/mongo/ servidor/description.rb,
lib/mongo/ servidor/app_metadata.rb,
lib/ mongo/ servidor/push_monitor.rb,
lib/mongo/ servidor/connection_base.rb,
lib/mongo/ servidor/connection_pool.rb,
lib/mongo/ servidor/connection_common.rb,
lib/mongo/ servidor/monitor/connection.rb,
lib/mongo/ servidor/pending_connection.rb,
lib/mongo/ servidor/description/features.rb,
lib/mongo/ servidor/monitor/app_metadata.rb,
lib/mongo/ servidor/app_metadata/platform.rb,
lib/mongo/ servidor/app_metadata/truncator.rb,
lib/mongo/ servidor/push_monitor/connection.rb,
lib/mongo/ servidor/app_metadata/environment.rb,
lib/mongo/ servidor/connection_pool/populator.rb,
lib/mongo/
servidor/ descrição/load_balancer.rb, lib/mongo/ servidor/round_trip_time_calculator.rb,
lib/mongo/ servidor/connection_pool/generation_manager.rb

Visão geral

Representa um único servidor no lado do servidor que pode ser autônomo, parte de um conjunto de réplicas ou um mongos.

Desde:

  • 2.0.0

Definido sob namespace

Classes: AppMeta

Colapsode resumo constante

CONNECT_TIMEOUT =

O tempo padrão em segundos para atingir o tempo limite de uma tentativa de conexão.

Desde:

  • 2.4.3

10

Constantes incluídas do Loggable

Loggable::Prefix

Recolhimento do Resumo do atributo de instância

Atributos incluídos do Evento::editor

#event_listeners

Recolhimento do Resumo do método de instância

Métodos incluídos do Event::publisher

#publish

Métodos incluídos do monitoramento::publicável

#publish_cmap_event, #publish_event, #publish_sdam_event

Métodos incluídos no Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger

Detalhes do construtor

. _

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.

Observação:

O servidor nunca deve ser instanciado diretamente fora de um cluster.

Crie uma instância de um novo objeto de servidor . Iniciará a atualização em segundo plano e assinará os eventos apropriados.

Exemplos:

Inicialize o servidor.

Mongo::Server.new('127.0.0.1:27017', cluster, monitoring, listeners)

Parâmetros:

  • endereço (Endereço)

    O endereço host:port ao qual se conectar.

  • cluster (Cluster)

    O cluster ao qual o servidor pertence.

  • Monitoramento (Monitoramento)

    O monitoramento.

  • event_listeners (Evento::Listeners)

    Os ouvintes do evento.

  • opções (Hash) (padrão para: {})

    As opções do servidor .

Hash de opções (opções):

  • :monitor (Booleano)

    Somente para uso interno do driver: se deve monitorar o servidor após instancia-lo.

  • :monitoring_io (verdadeiro, falso)

    Somente para uso interno do driver. Defina como falso para evitar que a E/S relacionada ao SDAM seja feita por este servidor. Observação: definir essa opção como falso tornará o servidor não funcional. Destina-se ao uso em testes que invocam manualmente transições de estado SDAM.

  • :populator_io (verdadeiro, falso)

    Somente para uso interno do driver. Defina como false para evitar que os threads de preenchimento sejam criados e iniciados no pool de conexões do servidor. Destina-se ao uso em testes que também desativam o monitoring_io, a menos que o populator seja explicitamente necessário. Se monitoring_io estiver desativado, mas o populator_io estiver ativado, o populator precisará ser fechado manualmente no final do teste, pois um cluster sem monitoramento é considerado não conectado e, portanto, não limpará os threads do populator do pool de conexões no fechamento.

  • :load_balancer (verdadeiro | falso)

    Se este servidor é um balanceador de carga .

  • :connect (string)

    O modo de conexão do cliente .

Desde:

  • 2.0.0



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/mongo/ servidor.rb', linha 69

def inicializar(endereço, cluster, Monitoramento, event_listeners, opções = {})
  @address = endereço
  @cluster = cluster
  @monitoring = Monitoramento
  opções = opções.dup
  _monitor = opções.excluir(:monitor)
  @opções = opções.congelar
  @event_listeners = event_listeners
  @connection_id_gen = classe.Novo fazer
    Incluir id
  end
  @scan_semafore = Semahora Distinto.Novo
  @round_trip_time_calculator = OpenTripTimeCalculator.Novo
  @description = Descrição.Novo(endereço, {},
                                 load_balancer: !!@opções[:load_balancer],
                                 force_load_balancer: force_load_balancer?)
  @last_scan = nada
  @last_scan_monotime = nada
  a menos que opções[:monitoring_io] == false
    @monitor = Monitorar.Novo(auto, event_listeners, Monitoramento,
                           opções.mesclar(
                             app_metadata: cluster.,
                             push_monitor_app_metadata: cluster.,
                             heartbeat_interval: cluster.heartbeat_interval
                           ))
    start_monitoring a menos que _monitor == false
  end
  @connected = true
  @pool_lock = Mutex.Novo
end

Detalhes do atributo da instância

#endereçostring (somente leitura)

Retorna o endereço configurado para o servidor.

Retorna:

  • (string)

    O endereço configurado para o servidor.

Desde:

  • 2.0.0



101
102
103
# File 'lib/mongo/ servidor.rb', linha 101

def endereço
  @address
end

#clusterCluster (somente leitura)

Retorna cluster O cluster de servidor .

Retorna:

  • (Cluster)

    cluster O cluster do servidor .

Desde:

  • 2.0.0



104
105
106
# File 'lib/mongo/ servidor.rb', linha 104

def cluster
  @cluster
end

#descriçãoServidor::Descrição (somente leitura)

Retorna descrição A descrição do servidor que o monitor atualiza.

Retorna:

Desde:

  • 2.0.0



118
119
120
# File 'lib/mongo/ servidor.rb', linha 118

def Descrição
  @description
end

#monitornulo | Monitor (somente leitura)

Monitor de retorno O monitor do servidor . nil se o servidor foi criado com monitoring_io: opção falsa.

Retorna:

  • (nil | Monitor)

    monitorar O monitor do servidor . nil se o servidor foi criado com monitoring_io: opção falsa.

Desde:

  • 2.0.0



108
109
110
# File 'lib/mongo/ servidor.rb', linha 108

def monitorar
  @monitor
end

#MonitoringMonitoramento (somente leitura)

Monitoramento de retornos O monitoramento.

Retorna:

Desde:

  • 2.0.0



114
115
116
# File 'lib/mongo/ servidor.rb', linha 114

def Monitoramento
  @monitoring
end

#opçõesHash (somente leitura)

Retorna o hash de opções.

Retorna:

  • (Hash)

    O hash de opções.

Desde:

  • 2.0.0



111
112
113
# File 'lib/mongo/ servidor.rb', linha 111

def opções
  @opções
end

#round_trip_time_calculator ➤RoundTripTimeCalculator (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 o objeto Calculadora de tempo de ida e volta.

Retorna:

Desde:

  • 2.0.0



227
228
229
# File 'lib/mongo/ servidor.rb', linha 227

def round_trip_time_calculator
  @round_trip_time_calculator
end

#varredura_semafor Semafor(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 o Semáforo para sinalizar a solicitação de uma verificação imediata deste servidor por seu monitor, se houver um em execução.

Retorna:

  • (Semáforo)

    Semáforo para sinalizar a solicitação de uma verificação imediata desse servidor por seu monitor, se houver um em execução.

Desde:

  • 2.0.0



223
224
225
# File 'lib/mongo/ servidor.rb', linha 223

def varredura_semafore
  @scan_semafore
end

Detalhes do método de instância

#==(outro) ➤ true, false

Esse servidor é igual a outro?

Exemplos:

O servidor é igual ao outro?

server == other

Parâmetros:

  • Outro (Objeto)

    O objeto com o qual comparar.

Retorna:

  • (verdadeiro, falso)

    Se os servidores forem iguais.

Desde:

  • 2.0.0



239
240
241
242
243
# File 'lib/mongo/ servidor.rb', linha 239

def ==(Outro)
  Método false a menos que Outro.is_a?(Servidor)

  endereço == Outro.endereço
end

#clear_connection_pool(service_id: nil, interrupt_in_use_connections: false) ➤ 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.

Parâmetros:

  • :service_id (Objeto)

    Feche conexões apenas com a ID de serviço especificada.

  • :interrupt_in_use_connections (verdadeiro | falso)

    Se as conexões limpas também devem ou não ser interrompidas.

Desde:

  • 2.0.0



642
643
644
645
646
647
648
649
650
651
652
# File 'lib/mongo/ servidor.rb', linha 642

def clear_connection_pool(service_id: nada, interrupt_in_use_connections: false)
  @pool_lock.sincronizar fazer
    # Um servidor sendo marcado como desconhecido após ser fechado é teoricamente
    # incorreto, mas não altera significativamente nenhum estado.
    # Porque historicamente o driver permitia que os servidores fossem marcados
    # desconhecido a qualquer momento, continue fazendo isso mesmo que o pool esteja fechado.
    se @pool && !@pool.fechado?
      @pool.desconecte-se!(service_id: service_id, interrupt_in_use_connections: interrupt_in_use_connections)
    end
  end
end

#clear_description ➤ 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.

Limpe a descrição do servidor para que ele seja considerado desconhecido e possa ser desconectado com segurança.

Desde:

  • 2.0.0



632
633
634
# File 'lib/mongo/ servidor.rb', linha 632

def clear_description
  @description = mongo::Servidor::Descrição.Novo(endereço, {})
end

# objeto próximo ➤

Desde:

  • 2.0.0



287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
# File 'lib/mongo/ servidor.rb', linha 287

def Fechar
  monitorar.pare! se monitorar

  @connected = false

  _pool = nada
  @pool_lock.sincronizar fazer
    _pool, @pool = @pool, nada
  end

  # TODO: altere isso para _pool.close em RUBY-3174.
  # Limpe o pool. Se o servidor não for desconhecido, o
  # pool ficará pronto. Pare o thread preenchedor de background.
  _pool&.Fechar(keep_ready: true)

  nada
end

#compressorString | nil

Obsoleto.
Observação:

A compressão é negociar para cada conexão separadamente.

O compressor negociar pelo monitor do servidor , se houver.

Este atributo é nulo se nenhuma verificação de servidor ainda tiver sido concluída e se nenhuma compactação tiver sido negociar.

Retorna:

  • (string | nil)

    O compressor negociável.

Desde:

  • 2.0.0



175
176
177
178
179
# File 'lib/mongo/ servidor.rb', linha 175

def compressor, compressor
  Método a menos que monitorar

  monitorar.compressor, compressor
end

#conectável?true, false

Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

Determine se uma conexão com o servidor pode ser estabelecida e se as mensagens podem ser enviadas para ele.

Exemplos:

O servidor é conectável?

server.connectable?

Retorna:

  • (verdadeiro, falso)

    Se o servidor estiver conectável.

Desde:

  • 2.1.0



256
# File 'lib/mongo/ servidor.rb', linha 256

def conectável?; 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 servidor está conectado.

Retorna:

  • (true|false)

    Se o servidor está conectado.

Desde:

  • 2.7.0



311
312
313
# File 'lib/mongo/ servidor.rb', linha 311

def conectado?
  @connected
end

#desconectar!verdadeiro

Desconecte o driver deste servidor.

Desconecta todas as conexões ociosas para este servidor em seu pool de conexões, se houver. Interrompe o preenchimento do pool de conexões, se ele estiver em execução. Não fecha imediatamente as conexões que estão atualmente com check-out (ou seja, em uso) - essas conexões serão fechadas quando forem retornadas aos seus respectivos pools de conexões. Pare o monitor de background do servidor.

Retorna:

  • (verdadeiro)

    Sempre verdadeiro.

Desde:

  • 2.0.0



270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'lib/mongo/ servidor.rb', linha 270

def desconecte-se!
  monitorar.pare! se monitorar

  @connected = false

  # A especificação atual do CMAP exige que um pool seja praticamente inutilizável
  # se o servidor for desconhecido (ou, portanto, desconectado).
  # No entanto, quaisquer operações pendentes devem continuar até a conclusão,
  # e suas conexões precisam ser verificadas no pool para serem
  # desmoronado. Devido a esse requisito de limpeza, não podemos apenas
  # feche o pool e defina-o como nulo aqui, para ser recriado na próxima
  # vez que o servidor é descoberto.
  pool_internal&.Limpar

  true
end

#force_load_balancer?verdadeiro | 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.

Retorna se este servidor é forçado a ser um balancer de carga.

Retorna:

  • (verdadeiro | falso)

    Se este servidor é forçado a ser um balancer de carga.

Desde:

  • 2.0.0



125
126
127
# File 'lib/mongo/ servidor.rb', linha 125

def force_load_balancer?
  opções[:connect] == :load_balanced
end

#handle_auth_failure!Objeto

Lidar com falha de autenticação.

Exemplos:

Lidar com possível falha de autenticação.

server.handle_auth_failure! do
  Auth.get(user).(self)
end

Retorna:

  • (Objeto)

    O resultado da execução do bloco.

Aumenta:

Desde:

  • 2.3.0



510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
# File 'lib/mongo/ servidor.rb', linha 510

def handle_auth_failure!
  rendimento
salvar mongo::Erro::SocketTimeoutError
  # possivelmente o cluster está lento, não desista dele
  aumentar
salvar mongo::Erro::Erro de soquete, auth::Não autorizado => e
  # erro de rede sem tempo limite ou erro de autenticação, limpe o pool e marque o
  # topologia como desconhecida
  desconhecido!(
    geração: e.geração,
    service_id: e.service_id,
    stop_push_monitor: true
  )
  aumentar
end

#handle_handshake_failure!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.

Lidar com falha de handshake.

Desde:

  • 2.7.0



485
486
487
488
489
490
491
492
493
494
495
496
# File 'lib/mongo/ servidor.rb', linha 485

def handle_handshake_failure!
  rendimento
salvar mongo::Erro::Erro de soquete, mongo::Erro::SocketTimeoutError => e
  a menos que e.rótulo?('SystemOverloadedError')
    desconhecido!(
      geração: e.geração,
      service_id: e.service_id,
      stop_push_monitor: true
    )
  end
  aumentar
end

#heartbeat_frequencyObject Também conhecido como: heartbeat_frequency_seconds

Obsoleto.

Desde:

  • 2.0.0



153
154
155
# File 'lib/mongo/ servidor.rb', linha 153

def heartbeat_frequency
  cluster.heartbeat_interval
end

#inspecionarstring

Obtenha uma inspeção de servidor bem impressa.

Exemplos:

Obtenha a inspeção do servidor .

server.inspect

Retorna:

  • (string)

    A string de inspeção legal.

Desde:

  • 2.0.0



346
347
348
# File 'lib/mongo/ servidor.rb', linha 346

def inspecionar
  "#<Mongo::Server:0x#{object_id} endereço=#{endereço.host}:#{endereço.porta} #{status}>"
end

#last_scan ➤ Hora | nada

Retorna last_scan A hora em que a última verificação do servidor foi concluída ou nulo se o servidor ainda não tiver sido verificado.

Retorna:

  • (Tempo | nulo)

    last_scan A hora em que a última verificação do servidor foi concluída, ou nulo se o servidor ainda não tiver sido verificado.

Desde:

  • 2.4.0



133
134
135
136
137
138
139
# File 'lib/mongo/ servidor.rb', linha 133

def last_scan
  se Descrição && !Descrição.config.vazio?
    Descrição.last_update_time
  mais
    @last_scan
  end
end

#last_scan_monotime ➤ Flutuante | 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.

Retorna last_scan_monotime A hora monotônica em que a última verificação do servidor foi concluída ou nulo se o servidor ainda não tiver sido verificado.

Retorna:

  • (Flutuante | nulo)

    last_scan_monotime A hora monotônica em que a última verificação do servidor foi concluída ou nulo se o servidor ainda não tiver sido verificado.

Desde:

  • 2.0.0



144
145
146
147
148
149
150
# File 'lib/mongo/ servidor.rb', linha 144

def last_scan_monotime
  se Descrição && !Descrição.config.vazio?
    Descrição.last_update_monotime
  mais
    @last_scan_monotime
  end
end

#matches_tag_set?(tag_set) ➤ true, false

Determine se as tags fornecidas são um subconjunto das tags do servidor.

Exemplos:

As tags fornecidas são um subconjunto das tags do servidor.

server.matches_tag_set?({ 'rack' => 'a', 'dc' => 'nyc' })

Parâmetros:

  • tag_set (Hash)

    O conjunto de tags para comparar com as tags do servidor.

Retorna:

  • (verdadeiro, falso)

    Se as tags fornecidas forem um subconjunto das tags do servidor.

Desde:

  • 2.0.0



443
444
445
446
447
# File 'lib/mongo/ servidor.rb', linha 443

def matches_tag_set?(tag_set)
  tag_set.keys.todos? fazer |k|
    tags[k] && tags[k] == tag_set[k]
  end
end

#próximo_connection_id ➤ 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.

Desde:

  • 2.0.0



655
656
657
# File 'lib/mongo/ servidor.rb', linha 655

def Next_connection_id
  @connection_id_gen.Next_id
end

#poolMongo::Server::ConnectionPool

Obtenha o pool de conexões deste servidor.

Exemplos:

Obtenha o pool de conexões do servidor.

server.pool

Retorna:

Aumenta:

Desde:

  • 2.0.0



408
409
410
411
412
413
414
415
416
417
# File 'lib/mongo/ servidor.rb', linha 408

def pool
  aumentar Erro::ServerNotUsable, endereço se desconhecido?

  @pool_lock.sincronizar fazer
    opciona = conectado? ? opções : opções.mesclar(populator_io: false)
    @pool ||= Pool de Conexões.Novo(auto, opciona).toque fazer |pool|
      pool.pronto
    end
  end
end

#pool_internal ➤ Server::ConnectionPool | 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.

Método de driver interno para recuperar o pool de conexões deste servidor.

Ao contrário de pool, pool_internal não criará um pool se um ainda não existir.

Retorna:

Desde:

  • 2.0.0



427
428
429
430
431
# File 'lib/mongo/ servidor.rb', linha 427

def pool_internal
  @pool_lock.sincronizar fazer
    @pool
  end
end

#publish_opening_event ➤ 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.

Publica o evento de abertura do servidor .

Desde:

  • 2.0.0



331
332
333
334
335
336
# File 'lib/mongo/ servidor.rb', linha 331

def publish_opening_event
  publish_sdam_event(
    Monitoramento::SERVER_OPENING,
    Monitoramento::Evento::ServerOpening.Novo(endereço, cluster.topologia)
  )
end

#reconectar!verdadeiro

Reinicie o monitor do servidor .

Exemplos:

Reinicie o monitor do servidor .

server.reconnect!

Retorna:

  • (verdadeiro)

    Sempre verdadeiro.

Desde:

  • 2.1.0



457
458
459
460
# File 'lib/mongo/ servidor.rb', linha 457

def reconecte-se!
  monitorar.reinicie! se opções[:monitoring_io] != false
  @connected = true
end

#retry_reads?Booleano

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 servidor permite novas tentativas de leitura moderna.

Retorna:

  • (Booleano)

Desde:

  • 2.0.0



529
530
531
# File 'lib/mongo/ servidor.rb', linha 529

def retry_reads?
  !!logical_session_timeout
end

#retry_writes?true, false

Observação:

As Retryable Writes só estão disponíveis com clusters fragmentados ou conjuntos de réplicas.

Observação:

Algumas das condições neste método retornam automaticamente falso para topologias com balanceamento de carga. As condições neste método devem ser sempre verdadeiras, uma vez que as topologias com balanceamento de carga só estão disponíveis no MongoDB 5.0+, e não para topologias autônomo . Portanto, podemos presumir que as gravações repetidas estão ativadas.

As gravações enviadas a este servidor serão repetidas.

Exemplos:

As gravações serão repetidas.

server.retry_writes?

Retorna:

  • (verdadeiro, falso)

    As gravações serão repetidas.

Desde:

  • 2.5.0



549
550
551
# File 'lib/mongo/ servidor.rb', linha 549

def retry_writes?
  !!((logical_session_timeout && !autônomo?) || load_balancer?)
end

#start_monitoring ➤ 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.

Comece a monitorar o servidor.

Usado internamente pelo driver para adicionar um servidor a um cluster enquanto atrasa o monitoramento até que o servidor esteja no cluster.

Desde:

  • 2.0.0



321
322
323
324
325
326
# File 'lib/mongo/ servidor.rb', linha 321

def start_monitoring
  publish_opening_event
  Método a menos que opções[:monitoring_io] != false

  monitorar.corra!
end

#statusString

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 uma string que representa o status do servidor (por exemplo, PRIMARY).

Retorna:

  • (string)

    string representando o status do servidor (por exemplo PRIMARY).

Desde:

  • 2.0.0



353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
# File 'lib/mongo/ servidor.rb', linha 353

def Status
  se load_balancer?
    'LB'
  elsif primário?
    'PRIMARY'
  elsif secundário?
    'SECUNDÁRIO'
  elsif autônomo?
    'STANDALONE'
  elsif árbitro?
    'ARBITER'
  elsif ghost?
    'GHOST'
  elsif outro?
    'OTHER'
  elsif mongos?
    'MONGOS'
  elsif desconhecido?
    'UNKNOWN'
  mais
    # Como o método resumo é frequentemente usado para depuração, não crie
    # uma exceção caso nenhum dos tipos esperados corresponda
    nada
  end
end

#resumoObjeto

Observação:

Este método é experimental e sujeito a alterações.

Desde:

  • 2.7.0



383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
# File 'lib/mongo/ servidor.rb', linha 383

def Resumo
  Status = auto.Status || ''
  Status += " replica_set=#{replica_set_name}" se replica_set_name

  Status += ' NO-MONITORING' a menos que monitorar&.executando?

  Status += " pool=#{@pool.resume}" se @pool

  endereço_bit = se endereço
                  "#{endereço.host}:#{endereço.porta}"
                mais
                  'nil'
                end

  "#<Endereço do servidor=#{endereço_bit} #{status}>"
end

#desconhecido!(opções = {}) ➤ Objeto

Marca o servidor como desconhecido e publica o evento SDAM associado (descrição do servidor alterada).

Se a geração for passada em opções, o servidor só será marcado como desconhecido se a geração passada não for mais antiga do que a geração atual do pool de conexões do servidor.

Parâmetros:

  • opções (Hash) (padrão para: {})

    Opções.

Hash de opções (opções):

  • :generação (Inteiro)

    Geração do pool de conexões da conexão que foi usada para a operação que produz o erro.

  • :keeper_connection_pool (verdadeiro | falso)

    Normalmente, quando a nova descrição do servidor é desconhecida, o pool de conexões no respectivo servidor é limpo. Defina esta opção como verdadeiro para manter o pool de conexões existente (necessário ao lidar com erros não mestres em 4.2+ servidores).

  • :topology_version (TopologyVersion)

    Versão de topologia da resposta de erro que está fazendo com que o servidor seja marcado como desconhecido.

  • :stop_push_monitor (verdadeiro | falso)

    Se deve parar o PushMonitor associado ao servidor, se houver.

  • :service_id (Objeto)

    Descartar o estado apenas para a ID de serviço especificada.

Desde:

  • 2.4.0, Os eventos SDAM são enviados a partir da versão 2.7.0



577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
# File 'lib/mongo/ servidor.rb', linha 577

def desconhecido!(opções = {})
  pool = pool_internal

  se load_balancer?
    # Quando o cliente está em topologia com balanceamento de carga, servidores (o e
    # somente que pode ser) começa como balanceador de carga e permanece como
    # balanceador de carga indefinidamente. Como tal, não está marcado como desconhecido.
    #
    # No entanto, este método também limpa o pool de conexões do servidor
    # quando o último é marcado como desconhecido e essa parte precisa acontecer
    # quando o servidor é um balancer de carga.
    #
    # É possível que um servidor do balancer de carga não tenha um ID de serviço,
    #, por exemplo , se ainda não houve nenhuma conexão bem-sucedida para
    # este servidor, mas o servidor ainda pode ser marcado como desconhecido se um
    # dessas conexões falharam no meio do caminho para o estabelecimento.
    se service_id = opções[:service_id]
      pool&.desconecte-se!(service_id: service_id)
    end
    Método
  end

  # NOTA: você não pode usar a navegação segura aqui porque, se o pool for nulo, você terminará
  # up tentando avaliar Inteiro < nil que é inválido.
  Método se opções[:generação] && pool && opções[:generação] < pool.geração

  se opções[:topology_version] && Descrição.topology_version &&
     !opções[:topology_version].gt?(Descrição.topology_version)
    Método
  end

  monitorar&.stop_push_monitor! se opções[:stop_push_monitor]

  # O fluxo SDAM atualizará a descrição no servidor sem no local
  # mutações e invoque transições SDAM conforme necessário.
  config = {}
  config['serviceId'] = opções[:service_id] se opções[:service_id]
  config['topologyVersion'] = opções[:topology_version] se opções[:topology_version]
  new_description = Descrição.Novo(endereço, config,
                                    load_balancer: load_balancer?,
                                    force_load_balancer: opções[:connect] == :load_balanced)
  cluster.run_sdam_flow(Descrição, new_description, opções)
end

#update_description(description) ➤ 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.

Desde:

  • 2.0.0



622
623
624
625
626
# File 'lib/mongo/ servidor.rb', linha 622

def update_description(Descrição)
  pool = pool_internal
  pool.pronto se pool && !Descrição.desconhecido?
  @description = Descrição
end

#update_last_scanObject

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.

Desde:

  • 2.0.0



660
661
662
663
# File 'lib/mongo/ servidor.rb', linha 660

def update_last_scan
  @last_scan = Hora.agora
  @last_scan_monotime = Utilidades.monotonic_time
end

#with_connection(connection_global_id: nil, context: nil, &block) ➤ Objeto

Execute um bloco de código com uma conexão, que é check-out do pool do servidor e, em seguida, check-in novamente.

Exemplos:

Envie uma mensagem com a conexão.

server.with_connection do |connection|
  connection.dispatch([ command ])
end

Retorna:

  • (Objeto)

    O resultado da execução do bloco.

Desde:

  • 2.3.0



473
474
475
476
477
478
479
# File 'lib/mongo/ servidor.rb', linha 473

def with_connection(connection_global_id: nada, contexto: nada, &noum: bloco ; verb: bloquear)
  pool.with_connection(
    connection_global_id: connection_global_id,
    contexto: Contexto,
    &noum: bloco ; verb: bloquear
  )
end