Clase: Mongo::Server::ConnectionPool::GenerationManager Privada
- Hereda:
-
Objeto
- Objeto
- Mongo::Servidor::Grupo de conexiones::Gestor de generación
- Definido en:
- lib/mongo/server/connection_pool/generation_manager.rb
Overview
Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.
Colapso delresumen de atributos de instancia
- #servidor ⇒ Objeto solo lectura privada
Colapso del resumen del método de instancia
- #bump(service_id: nil) ⇒ Objeto privada
-
#cerrar_todas_las_tuberías ⇒ Objeto
privada
Cierre todas las tuberías en el administrador de generación.
- #generación(service_id: nil) ⇒ Objeto privada
- #generation_unlocked(service_id: nil) ⇒ Objeto privada
-
#inicializar(servidor:) ⇒ GenerationManager
constructor
privada
Una nueva instancia de GenerationManager.
- #pipe_fds(id_de_servicio: nulo) ⇒ Objeto privada
- #remove_pipe_fds(generación, service_id: nil) ⇒ Objeto privada
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, clave| hash[clave] = 1 } @pipe_fds = Picadillo.Nuevo { |hash, clave| hash[clave] = { 1 => IO.pipe } } @server = Server @cerrar = Mutex.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 rugosidad(id_de_servicio: nulo) @cerrar.sincronizar hacer cerrar_todos_programados Si id_de_servicio gen = @map[id_de_servicio] += 1 @pipe_fds[id_de_servicio] ||= {} @pipe_fds[id_de_servicio][gen] = IO.pipe else # Cuando no se proporciona la id del servicio, pueden ocurrir 1 de 2 cosas # sucediendo; # # 1. El grupo no es un balanceador de carga, en cuyo caso solo # es necesario incrementar la generación para el service_id nulo. # 2. El grupo es para un balanceador de carga, en cuyo caso necesitamos # 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[id_de_servicio] ||= {} @pipe_fds[id_de_servicio][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.
Cierre todas las tuberías en el administrador de generación.
Este método debe llamarse solo cuando el ConnectionPool que posee este GenerationManager esté cerrado, para garantizar que todas las tuberías se cierren 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 @cerrar.sincronizar hacer cerrar_todos_programados @pipe_fds.claves.cada hacer |id_de_servicio| generaciones = @pipe_fds.borrar(id_de_servicio) 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(id_de_servicio: nulo) validate_service_id!(id_de_servicio) @cerrar.sincronizar hacer @map[id_de_servicio] 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(id_de_servicio: nulo) validate_service_id!(id_de_servicio) @map[id_de_servicio] end |
#pipe_fds(id_de_servicio: 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.
49 50 51 |
# Archivo 'lib/mongo/server/connection_pool/generation_manager.rb', línea 49 def tubería_fds(id_de_servicio: nulo) @pipe_fds.dig(id_de_servicio, @map[id_de_servicio]) 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, id_de_servicio: nulo) validate_service_id!(id_de_servicio) R, w = @pipe_fds[id_de_servicio].borrar(generación) return a no ser que R && w w.cerrar # Programar el cierre del extremo de lectura de la tubería. No podemos cerrarlo. de inmediato, ya que necesitamos esperar a que cualquier llamadas Kernel#select # Observe que parte de la tubería está cerrada y verifique el conector. Esto # Todo sucede cuando se intenta leer desde el socket y se espera #para que esté listo de nuevo. @scheduled_for_close << R end |