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

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
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 90

def inicializar(Servidor, opções = {})
  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



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

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



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

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



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

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



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

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



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

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



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

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



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

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



310
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
# Arquivo 'lib/mongo/ servidor/connection.rb', linha 310

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



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

def erro?
  !!@erro
end

#interrompido!Objeto

Marque a conexão como interrompida.

Desde:

  • 2.0.0



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

def unpin_all
  @pin_reasons.Limpar
end