Clase: Mongo::Server::ConnectionPool::GenerationManager Privado
- Hereda:
-
Objeto
- Objeto
- Mongo::Servidor::ConexiónPool::GeneraciónGerente
- Definido en:
- lib/mongo/servidor/connection_pool/generation_manager.rb
Overview
Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.
Resumen de atributos de la instancia colapsar
- #servidor ⇒ Objeto Solo lectura privado
Resumen del método de instancia colapsar
- #bump(service_id: nil) ⇒ objeto privado
-
#close_all_pipes ⇒ Object
privado
Cierra todas las tuberías en el administrador de generación.
- #generación(service_id: nil) ⇒ objeto privado
- #generation_unlocked(service_id: nil) ⇒ Objeto privado
-
#initialize(servidor:) ⇒ GenerationManager
constructor
privado
Una nueva instancia de GenerationManager.
- #pipe_fds(service_id: nil) ⇒ Objeto privado
- #remove_pipe_fds(generation, service_id: nil) ⇒ objeto privado
Detalles del Constructor
#inicializar(servidor:) ⇒ GenerationManager
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve una nueva instancia de GenerationManager.
22 23 24 25 26 27 28 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 22 def inicializar(servidor:) @map = encriptada.Nuevo { |hash, llave| hash[llave] = 1 } @pipe_fds = encriptada.Nuevo { |hash, llave| hash[llave] = { 1 => IO.pipe } } @server = Server @lock = Mutex (exclusión mutua).Nuevo @scheduled_for_close = [] end |
Detalles de atributo de instancias
#servidor ⇒ objeto (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
30 31 32 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 30 def Server @server end |
Detalles del método de instancia
#bump(service_id: nil) ⇒ objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 65 def esguince(service_id: nulo) @lock.sincronizar hacer cerrar_todas_las_programadas si service_id gen = @map[service_id] += 1 @pipe_fds[service_id] ||= {} @pipe_fds[service_id][gen] = IO.pipe else # Cuando no se proporciona la id del servicio, pueden ocurrir 1 de 2 cosas # sucede; # # 1. El grupo no está conectado a un balanceador de cargas, en cuyo caso solo # es necesario incrementar la generación para el service_id nulo. # 2. El pool está a un balanceador de carga, en cuyo caso debemos # incrementar la generación para cada servicio. # # Incrementar todo en el mapa cumple ambos tareas. @map.cada hacer |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 es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Cierra todas las tuberías en el administrador de generación.
Este método sólo debe ser llamado cuando el ConnectionPool que posee este GenerationManager está cerrado, para asegurar que todas las pipes estén cerradas correctamente.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 96 def close_all_pipes @lock.sincronizar hacer cerrar_todas_las_programadas @pipe_fds.claves.cada hacer |service_id| generaciones = @pipe_fds.borrar(service_id) generaciones.values.cada hacer |(R, w)| R.Cerrar w.Cerrar rescate IOError # Ignorar cualquier IOError que ocurra al cerrar el # pipe, ya que no podemos hacer nada al respecto. end end end end |
#generación(service_id: nulo) ⇒ Objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
32 33 34 35 36 37 38 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 32 def Generación(service_id: nulo) validate_service_id!(service_id) @lock.sincronizar hacer @map[service_id] end end |
#generation_unlocked(service_id: nil) ⇒ objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
40 41 42 43 44 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 40 def generación desbloqueada(service_id: nulo) validate_service_id!(service_id) @map[service_id] end |
#pipe_fds(service_id: nil) ⇒ Object
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
46 47 48 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 46 def pipe_fds(service_id: nulo) @pipe_fds.dig(service_id, @map[service_id]) end |
#remove_pipe_fds(generación, service_id: nil) ⇒ Objeto
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 50 def remove_pipe_fds(Generación, service_id: nulo) validate_service_id!(service_id) R, w = @pipe_fds[service_id].borrar(Generación) return a menos que R && w w.Cerrar # Programa el cierre del extremo de lectura del pipe. No podemos cerrarlo. de inmediato, ya que necesitamos esperar a que cualquier llamadas Kernel#select # Fíjese en que una parte del pipe está cerrada y revise el enchufe. Esto # todo ocurre al intentar leer del socket y esperar a # que se vuelva a preparar. @scheduled_for_close << R end |