Classe: Mongo::Server::ConnectionPool::GenerationManager Private
- Herda:
-
Objeto
- Objeto
- Mongo::Server::ConnectionPool::GenerationManager
- 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.
Recolhimento do Resumo do atributo de instância
- #servidor ➤ Objeto Somente leitura privado
Recolhimento do Resumo do método de instância
- #bump(service_id: nil) ➤ Objeto privado
-
#close_all_pipes ➤ Objeto
privado
Feche todos os pipes no gerenciador de geração.
- #geration(service_id: nil) ➤ Objeto privado
- #geration_unlocked(service_id: nil) ➤ Objeto privado
-
#initialize(servidor:) ⇒ GeraçãoManager
construtor
privado
Uma nova instância do GeraçãoManager.
- #pipe_fds(service_id: nil) ➤ Objeto privado
- #remove_pipe_fds(generação, service_id: nil) ➤ Objeto privado
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.
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
#server ➤ 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.
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.
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_pipes ➤ 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.
Feche todos os pipes no gerenciador de geração.
Este método deve ser chamado somente quando o ConnectionPool que possui este GenerationManager estiver fechado, para garantir que todos os pipes estejam fechados corretamente.
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 qualquer IOError que ocorra ao fechar o pipe, pois não há nada que possamos fazer a respeito. 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.
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.
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.
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.
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 |