Clase: Mongo::Server::ConnectionPool::GenerationManager Privada

Hereda:
Objeto
  • Objeto
Mostrar todo
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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0

Colapso delresumen de atributos de instancia

Colapso del resumen del método de instancia

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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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

#servidorObjeto (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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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íasObjeto

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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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.

Desde:

  • 2.0.0, en gran parte reescrito en 2.9.0



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