Classe: Mongo::Servidor::Conexão

Herda:
ConnectionBase mostrar tudo
Estendido por:
Encaminhável
Inclui:
ID, Monitoramento::publicável, Retryable
Definido em:
lib/mongo/ servidor/connection.rb

Visão geral

Esta aula modela as conexões de soquete para servidores e seu comportamento.

Desde:

  • 2.0.0

Colapsode resumo constante

PING =
Obsoleto.

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

O comando ping.

Desde:

  • 2.1.0

{ ping: 1 }.congelar
PING_OP_MSG =
Obsoleto.

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

O comando ping para um OP_MSG

Desde:

  • 2.5.0

{ :ping => 1, '$db' => Database::ADMIN }.congelar
PING_OP_MSG_MSSAGE =
Obsoleto.

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

Mensagem de ping como OP_MSG

Desde:

  • 2.5.0

protocolo::Msg.Novo([], {}, PING_OP_MSG)
PING_OP_MSG_BYTES =
Obsoleto.

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

A mensagem de ping OP_MSG como bytes brutos

Desde:

  • 2.5.0

PING_OP_MSG_MSSAGE.serializar.to_s.congelar

Constantes incluídas do Loggable

Loggable::Prefix

Constantes herdadas de ConnectionBase

Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, Mongo::Server::ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, Mongo::Server::ConnectionBase::REDUCED_MAX_BSON_SIZE

Recolhimento do Resumo do atributo de instância

Atributos incluídos no Monitoramento::publicável

#monitoring

Atributos herdados de ConnectionBase

#description, #options, #server

Atributos herdados de ConnectionCommon

#compressor, #pid

Recolhimento do Resumo do método de instância

Métodos incluídos do ID

incluído

Métodos incluídos no Retryable

#read_worker, #select_server, #with_overload_retry, #write_worker

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

Métodos herdados de ConnectionBase

#app_metadata, #dispatch, # generação, #service_id

Métodos herdados de ConnectionCommon

#handshake_command, #handshake_document, #interrupt_socket

Detalhes do construtor

#inicializar(servidor, opções = {}) ➤ Conexão

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:

A conexão nunca deve ser diretamente instanciada fora de um servidor MongoDB.

Cria um novo objeto de conexão para o endereço de destino especificado com as opções especificadas.

O construtor não realiza nenhuma E/S (e, portanto, não cria soquetes, negociações nem autentica); chamada conectada! no objeto de conexão para criar a conexão de rede.

Exemplos:

Crie a conexão.

Connection.new(server)

Parâmetros:

  • Servidor (Mongo::Server)

    O servidor para o qual a conexão é.

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

    As opções de conexão.

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

  • :pipe (IO)

    O descritor de arquivo para o final de leitura do pipe para ouvir durante a chamada de sistema selecionada ao ler do soquete.

  • :generação (Inteiro)

    A geração desta conexão. A geração só deve ser especificada nesta opção quando não estiver no modo de balanceamento de carga e deve ser a geração do pool de conexões quando a conexão for criada. No modo de balanceamento de carga, a geração é definida na conexão após a conclusão da negociação.

  • :server_api (Hash)

    A versão da API do servidor solicitado. Esse hash pode ter os seguintes itens:

    • :version -- string
    • :strict -- booleano
    • :deprecation_errors -- booleano

Desde:

  • 2.0.0



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 90

def inicializar(Servidor, opções = {})
  super()
  se Servidor.load_balancer? && opções[:generação]
    aumentar ArgumentError, 'A geração não pode ser definida quando o servidor é um balanceador de carga '
  end

  @id = Servidor.Next_connection_id
  @global_id = auto.classe.Next_id
  @monitoring = Servidor.Monitoramento
  @opções = opções.congelar
  @server = Servidor
  @socket = nada
  @last_checkin = nada
  @auth_mecanismo = nada
  @pid = Processo.PID
  @pin_reasons = definir.Novo

  publish_cmap_event(
    Monitoramento::Evento::Cmap::connectionCreated.Novo(endereço, id)
  )
end

Detalhes do atributo da instância

#global_id ➤ Inteiro (somente leitura)

em todas as conexões.

Retorna:

  • (Inteiro)

    O ID global da conexão. Isso será exclusivo

Desde:

  • 2.0.0



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

def global_id
  @global_id
end

#IDInteiro (somente leitura)

em conexões para o mesmo objeto de servidor.

Retorna:

  • (Inteiro)

    A ID da conexão. Isso será exclusivo

Desde:

  • 2.9.0



121
122
123
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 121

def id
  @id
end

#last_checkin ➤ Hora (somente leitura)

Retorna a última vez que a conexão foi verificada novamente em um pool.

Retorna:

  • (Tempo)

    A última vez que a conexão foi verificada novamente em um pool.

Desde:

  • 2.5.0



115
116
117
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 115

def last_checkin
  @last_checkin
end

Detalhes do método de instância

#fechado?verdadeiro | false

Se a conexão foi fechada.

As conexões fechadas não devem mais ser usadas. Em vez disso, obtenha uma nova conexão do pool de conexões.

Retorna:

  • (verdadeiro | falso)

    Se a conexão foi fechada.

Desde:

  • 2.9.0



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

def fechado?
  !!@closed
end

#connect!(contexto = nil) ➤ verdadeiro

Observação:

Este método muta o objeto de conexão definindo um soquete se anteriormente não existisse.

Estabelece uma conexão de rede com o endereço de destino.

Se a conexão já estiver estabelecida, esse método não fará nada.

Exemplos:

Conecte-se ao host.

connection.connect!

Retorna:

  • (verdadeiro)

    Se a conexão foi bem-sucedida.

Desde:

  • 2.0.0



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 229

def Conecte-se!(Contexto = nada)
  create_if_closed!

  a menos que @socket
    @socket = create_socket(Contexto)
    @description, @compressor = do_connect

    se Servidor.load_balancer?
      se Lint.habilitado? && !service_id
        aumentar Erro::InternalDriverError,
              'A conexão é com um balanceador de carga e deve ter service_id definido aqui, mas não tem '
      end
      @generação = connection_pool.geration_manager.geração(service_id: service_id)
    end

    publish_cmap_event(
      Monitoramento::Evento::Cmap::connectionReady.Novo(endereço, id)
    )

    @close_event_published = false
  end
  true
end

#conectado?verdadeiro | false

Se a conexão estava conectada e não foi interrompida, fechada ou teve um erro gerado.

Retorna:

  • (verdadeiro | falso)

    se a conexão estiver conectada.

Desde:

  • 2.0.0



141
142
143
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 141

def conectado?
  !fechado? && !erro? && !interrompido? && !!@socket
end

#connection_poolObjeto

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 pool de conexões a partir do qual essa conexão foi criada. Pode ser nulo.

Desde:

  • 2.0.0



133
134
135
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 133

def connection_pool
  opções[:connection_pool]
end

#desconectar!(opções = nil) ➤ verdadeiro

Observação:

Uma vez que uma conexão seja desconectada, ela não deve mais ser usada. Uma nova conexão deve ser obtida do pool de conexões que retornará uma conexão pronta ou criará uma nova conexão. Se a vinculação estiver ativada, a reutilização de uma conexão desconectada aumentará o Erro::LintError. Se o linting não estiver ativado, um aviso será registrado.

Observação:

Esse método muta o objeto de conexão definindo o soquete como nulo se o fechamento for bem-sucedido.

Desconecte a conexão.

Parâmetros:

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

    um conjunto personalizável de opções

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

  • :reason (Símbolo)

    O motivo pelo qual a conexão está sendo fechada.

  • :interrupted (verdadeiro | falso)

    Se a conexão foi interrompida ou não.

Retorna:

  • (verdadeiro)

    Se a desconexão for bem-sucedida.

Desde:

  • 2.0.0



311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 311

def desconecte-se!(opções = nada)
  # Observação: @closed pode ser verdadeiro aqui, mas também podemos ter um soquete.
  # Verifique o soquete e não o sinalizador @closed.
  @auth_mecanismo = nada
  @last_checkin = nada
  se soquete
    começar
      soquete.Fechar
    salvar StandardError
      nada
    end
    @socket = nada
  end
  @closed = true
  interrompido! se opções && opções[:interrupted]

  # Para satisfazer os testes de especificação do CMAP, publique eventos próximos mesmo se o
  # soquete nunca foi conectado (e, portanto, o evento pronto nunca foi
  #publicado). Mas veja se publicamos um evento próximo e não
  # publica várias vezes, a menos que o soquete tenha sido reconectado -
  # nesse caso, publique o evento próximo uma vez por fechamento do soquete.
  a menos que @close_event_published
    Razão = opções && opções[:reason]
    publish_cmap_event(
      Monitoramento::Evento::Cmap::connectionClosed.Novo(
        endereço,
        id,
        Razão
      )
    )
    @close_event_published = true
  end

  true
end

#erro?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.

Retorna:

  • (Booleano)

Desde:

  • 2.0.0



173
174
175
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 173

def erro?
  !!@erro
end

#interrompido!Objeto

Marque a conexão como interrompida.

Desde:

  • 2.0.0



168
169
170
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 168

def interrompido!
  @interrupted = true
end

#interrompido?verdadeiro | false

Se a conexão foi interrompida.

As conexões interrompidas já foram removidas do pool e não devem ser verificadas novamente no pool.

Retorna:

  • (verdadeiro | falso)

    Se a conexão foi interrompida.

Desde:

  • 2.0.0



163
164
165
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 163

def interrompido?
  !!@interrupted
end

#pin(reason = :cursor) ⇒ 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.

Marque a conexão como fixada pelo motivo fornecido.

Parâmetros:

  • Razão (Símbolo) (padrão para: :cursor)

    O motivo da fixação (:cursor ou :transação). O padrão é :cursor para compatibilidade com versões anteriores.

Desde:

  • 2.0.0



195
196
197
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 195

def pin(Razão = :cursor)
  @pin_reasons << Razão
end

#pingverdadeiro, falso

Obsoleto.

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

Observação:

Isso usa uma mensagem de ping pré-serializada para otimização.

Faça ping na conexão para ver se o servidor está respondendo aos comandos. Isso não está bloqueando no lado do servidor.

Exemplos:

Ping a conexão.

connection.ping

Retorna:

  • (verdadeiro, falso)

    Se o servidor estiver aceitando conexões.

Desde:

  • 2.1.0



360
361
362
363
364
365
366
367
368
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 360

def Ping
  ensure_connected fazer |soquete|
    responder = add_server_diagnóstico fazer
      soquete.escrever(PING_OP_MSG_BYTES)
      protocolo::mensagem.desserializar(soquete, max_message_size)
    end
    responder.documentos[0][(operação)::Resultado::OK] == 1
  end
end

#fixado?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 a conexão é usada por uma transação ou operações do cursor.

As conexões fixadas não devem ser desconectadas e removidas de um pool de conexões se estiverem ociosas ou obsoletas.

@retorno [ verdadeiro | false ] Se a conexão está fixada.

Retorna:

  • (Booleano)

Desde:

  • 2.0.0



185
186
187
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 185

def fixado?
  !@pin_reasons.vazio?
end

#record_checkin!auto

Registre a hora do último checkin.

Exemplos:

Registre o tempo de check-in nesta conexão.

connection.record_checkin!

Retorna:

  • (self)

Desde:

  • 2.5.0



389
390
391
392
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 389

def record_checkin!
  @last_checkin = Hora.agora
  auto
end

#socket_timeout ➤ Flutuante Também conhecido como: timeout

Obtenha o tempo limite para executar uma operação em um soquete.

Retorna:

  • (Flutuante)

    O tempo limite da operação em segundos.

Desde:

  • 2.0.0



375
376
377
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 375

def socket_timeout
  @timeout ||= opções[:socket_timeout]
end

#transportSymbol | 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.

Obtenha o tipo de transporte para esta conexão.

Retorna:

  • (Symbol | nil)

    O tipo de transporte, :tcp ou :unix, ou nil se não houver soquete.

Desde:

  • 2.0.0



399
400
401
402
403
404
405
406
407
408
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 399

def Transporte
  Método nada se @socket.nada?

  caso @socket
  quando mongo::Soquete::Unix
    :unix
  mais
    :tcp
  end
end

#unpin(reason =:cursor) ➤ 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.

Remova um pino da conexão pelo motivo fornecido.

Parâmetros:

  • Razão (Símbolo) (padrão para: :cursor)

    O motivo para desafixar (:cursor ou :transação). O padrão é :cursor para compatibilidade com versões anteriores.

Desde:

  • 2.0.0



205
206
207
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 205

def desafixar(Razão = :cursor)
  @pin_reasons.excluir(Razão)
end

#unpin_allObjeto

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.

Remova todos os pinos da conexão.

Desde:

  • 2.0.0



212
213
214
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 212

def unpin_all
  @pin_reasons.Limpar
end