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 ⇒ Object
privado
Close all pipes in the generation manager.
- #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 ⇒ Object
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.
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.
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 |