Classe: Mongo::Server::ConnectionPool::GenerationManager Private

Herda:
Objeto
  • Objeto
mostrar tudo
Definido em:
lib/mongo/ servidor/connection_pool/generation_manager.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Desde:

  • 2.0.0, amplamente reescrito em 2.9.0

Recolhimento do Resumo do atributo de instância

Recolhimento do Resumo do método de instância

Detalhes do construtor

#initialize(servidor:) ⇒ GeraçãoManager

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 nova instância do GeraçãoManager.

Desde:

  • 2.0.0, amplamente reescrito em 2.9.0



25
26
27
28
29
30
31
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 25

def inicializar(servidor:)
  @map = Hash.Novo { |hash, chave| hash[chave] = 1 }
  @pipe_fds = Hash.Novo { |hash, chave| hash[chave] = { 1 => IO.pipe } }
  @server = Servidor
  @ bloqueio = Mutex.Novo
  @scheduled_for_close = []
end

Detalhes do atributo da instância

#serverObject (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.

Desde:

  • 2.0.0, amplamente reescrito em 2.9.0



33
34
35
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 33

def Servidor
  @server
end

Detalhes do método de instância

#bump(service_id: nil) ➤ 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, amplamente reescrito em 2.9.0



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 68

def bump(service_id: nada)
  @ bloqueio.sincronizar fazer
    close_all_scheduled
    se service_id
      gen = @map[service_id] += 1
      @pipe_fds[service_id] ||= {}
      @pipe_fds[service_id][gen] = IO.pipe
    mais
      # Quando o ID de serviço não é fornecido, uma de duas coisas pode ser
      # acontecer;
      #
      # 1. O pool não é para um balanceador de carga , caso em que apenas
      # precisa incrementar a geração para o service_id nulo.
      # 2. O pool é para um balanceador de carga , caso em que precisamos
      # incrementar a geração para cada serviço.
      #
      # Incrementar tudo no mapa realiza ambas as tarefas.
      @map.cada fazer |k, v|
        gen = @map[k] += 1
        @pipe_fds[service_id] ||= {}
        @pipe_fds[service_id][gen] = IO.pipe
      end
    end
  end
end

#close_all_pipesObject

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.

Close all pipes in the generation manager.

This method should be called only when the ConnectionPool that owns this GenerationManager is closed, to ensure that all pipes are closed properly.

Desde:

  • 2.0.0, amplamente reescrito em 2.9.0



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 99

def close_all_pipes
  @ bloqueio.sincronizar fazer
    close_all_scheduled
    @pipe_fds.keys.cada fazer |service_id|
      gerações = @pipe_fds.excluir(service_id)
      gerações.values.cada fazer |(r, w)|
        r.Fechar
        w.Fechar
      salvar IOError
        # Ignore any IOError that occurs when closing the
        # pipe, as there is nothing we can do about it.
      end
    end
  end
end

#geration(service_id: nil) ➤ 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, amplamente reescrito em 2.9.0



35
36
37
38
39
40
41
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 35

def geração(service_id: nada)
  validate_service_id!(service_id)

  @ bloqueio.sincronizar fazer
    @map[service_id]
  end
end

#geration_unlocked(service_id: nil) ➤ 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, amplamente reescrito em 2.9.0



43
44
45
46
47
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 43

def geration_unlocked(service_id: nada)
  validate_service_id!(service_id)

  @map[service_id]
end

#pipe_fds(service_id: nil) ➤ 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, amplamente reescrito em 2.9.0



49
50
51
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 49

def pipe_fds(service_id: nada)
  @pipe_fds.dig(service_id, @map[service_id])
end

#remove_pipe_fds(generação, service_id: nil) ➤ 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, amplamente reescrito em 2.9.0



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Arquivo 'lib/mongo/ servidor/connection_pool/generation_manager.rb', linha 53

def remove_pipe_fds(geração, service_id: nada)
  validate_service_id!(service_id)

  r, w = @pipe_fds[service_id].excluir(geração)
  Método a menos que r && w

  w.Fechar
  # Agende a extremidade de leitura do pipe para ser fechada. Não podemos fechá-lo
  # imediatamente, pois precisamos aguardar qualquer chamada do Kernel#select para
  # observe que parte do pipe está fechada e verifique o soquete. Isto
  # tudo acontece ao tentar ler do soquete e esperar
  # para ficar pronto novamente.
  @scheduled_for_close << r
end