Clase: Mongo::Server::ConnectionPool::GenerationManager Privado

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

Desde:

  • 2.0.0, re-escrita en gran medida en 2.9.0

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

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, re-escrita en gran medida 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, 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

#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, re-escrita en gran medida 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, re-escrita en gran medida 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 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í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.

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.

Desde:

  • 2.0.0, re-escrita en gran medida 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
  @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.

Desde:

  • 2.0.0, re-escrita en gran medida 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(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.

Desde:

  • 2.0.0, re-escrita en gran medida 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(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.

Desde:

  • 2.0.0, re-escrita en gran medida en 2.9.0



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.

Desde:

  • 2.0.0, re-escrita en gran medida 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, 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