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(id_de_servicio: nulo) ⇒ Objeto privado
- #remove_pipe_fds(generation, service_id: nil) ⇒ objeto privado
Detalles del constructor
#inicializar(servidor:) ⇒ GenerationManager
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve una nueva instancia de GenerationManager.
25 26 27 28 29 30 31 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 25 def inicializar(servidor:) @map = Picadillo.Nuevo { |hash, llave| hash[llave] = 1 } @pipe_fds = Picadillo.Nuevo { |hash, llave| hash[llave] = { 1 => IO.pipe } } @server = Server @lock = Mutex (exclusión mutua).Nuevo @scheduled_for_close = [] end |
Detalles de los atributos de instancia
#servidor ⇒ objeto (solo lectura)
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
33 34 35 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 33 def Server @server end |
Detalles del método de instancia
#bump(service_id: nil) ⇒ objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el 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 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 68 def esguince(service_id: nulo) @lock.sincronizar hacer cerrar_todos_programados 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 |
#cerrar_todas_las_tuberías ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo 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.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 99 def cerrar_todas_las_tuberías @lock.sincronizar hacer cerrar_todos_programados @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 # tubería, ya que no hay nada que podamos hacer al respecto. end end end end |
#generación(service_id: nulo) ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
35 36 37 38 39 40 41 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 35 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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
43 44 45 46 47 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 43 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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
49 50 51 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 49 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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 53 def eliminar_tubería_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 sucede cuando se intenta leer desde el socket y se espera # que se vuelva a preparar. @scheduled_for_close << R end |