Class: Mongoid::Contextual::Mongo::DocumentsLoader Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Ampliado por:
Reenviable
Incluye:
Asociación::Cargable ansioso
Definido en:
lib/mongoid/contextual/mongo/documents_loader.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.

Carga documentos con los criterios proporcionados.

Resumen de atributos de la instancia colapsar

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Métodos incluidos desde Association::EagerLoadable

#crear_pipeline, #carga_rápida, #carga_rápida_con_búsqueda, #cargable_rápidamente?, #precarga, #precarga_para_búsqueda, #intercambiar_campos_locales_y_extranjeros?

Detalles del Constructor

#initialize(vista, clase, criterios, ejecutor: self.class.executor) ⇒ DocumentsLoader

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.

Inicializa la instancia del cargador de documentos y programa inmediatamente su ejecución utilizando el ejecutor proporcionado.

Parámetros:

  • vista (Mongo::Collection::View)

    La vista de la colección para obtener registros de la base de datos.

  • klass (clase)

    Clase de modelo Mongoid para instanciar documentos. Todos los registros obtenidos de la base de datos se convertirán en una instancia de esta clase, si es posible.

  • criterios (Mongoid::Criteria)

    Criterios que especifican qué documentos deben cargarse.

  • ejecutor (Concurrent::AbstractExecutorService) (por defecto: self.class.executor)

    Ejecutor que es capaz de ejecutar Concurrent::Promises::Future instancias.



88
89
90
91
92
93
94
95
96
97
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 88

def inicializar(vista, klass, criterios, ejecutor: sí mismo.clase.ejecutor)
  @view = vista
  @klass = klass
  @criteria = criterios
  @mutex = Mutex (exclusión mutua).Nuevo
  @state = :pendiente
  @futuro = simultáneo::Promesas.future_on(ejecutor) hacer
    Inicio && ejecutar
  end
end

Detalles de atributo de instancias

#criteriaMongoid::Criteria

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 criterios que especifican qué document deben cargarse. Se expone aquí porque el método eager_loadable? de Association::EagerLoadable espera que esto esté disponible.

Devuelve:

  • (Mongoid::Criteria)

    Criterio que especifica qué documentos deben cargarse. Se expone aquí porque el método eager_loadable? de Association::EagerLoadable espera que esto esté disponible.



74
75
76
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 74

def criterios
  @criteria
end

Detalles del método de clase

.executor(name = Mongoid.async_query_executor) ⇒ Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor

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 el executor adecuado según las opciones de configuración de Mongoid.

Parámetros:

  • Nombre (String | Symbol) (por defecto: Mongoid.async_query_executor)

    El nombre del ejecutor de query, puede ser :immediate o :global_thread_pool. Por defecto se seleccionó la opción de configuración async_query_executor.

Devuelve:

  • (Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor)

    El ejecutor que se utilizará para ejecutar tareas de carga de documentos.

Aumenta:



60
61
62
63
64
65
66
67
68
69
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 60

def sí mismo.ejecutor(Nombre = Mongoid.async_query_executor)
  caso Nombre.to_sym
  cuando inmediato
    immediate_executor
  cuando :global_thread_pool
    global_thread_pool_async_query_executor
  else
    propagar Errors::InvalidQueryExecutor.Nuevo(Nombre)
  end
end

.global_thread_pool_async_query_executorConcurrent::ThreadPoolExecutor

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 un ejecutor asíncrono que se utilizará cuando la opción de configuración async_query_executor esté configurada en :global_thread_pool. Este ejecutor ejecuta operaciones en hilos de segundo plano utilizando un grupo de hilos.

Devuelve:

  • (Concurrent::ThreadPoolExecutor)

    El ejecutor que se utilizará para ejecutar tareas de carga de documentos.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 31

def sí mismo.global_thread_pool_async_query_executor
  create_pool = proc hacer |Simultaneidad|
    simultáneo::ThreadPoolExecutor.Nuevo(
      min_threads: 0,
      max_threads: Simultaneidad,
      max_queue: Simultaneidad * 4,
      fallback_policy: llamador_ejecuta
    )
  end
  Simultaneidad = Mongoid.concurrencia_global_executor || 4
  @@global_thread_pool_async_query_executor ||= create_pool.llamar(Simultaneidad)
  si @@global_thread_pool_async_query_executor.max_length != Simultaneidad
    old_pool = @@global_thread_pool_async_query_executor
    @@global_thread_pool_async_query_executor = create_pool.llamar(Simultaneidad)
    old_pool.shutdown
  end
  @@global_thread_pool_async_query_executor
end

.immediate_executorConcurrent::ImmediateExecutor

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 un ejecutor síncrono para usar cuando la opción de configuración async_query_executor está configurada en :immediate. Este ejecutor ejecuta todas las operaciones en el hilo actual, bloqueando según sea necesario.

Devuelve:

  • (Concurrent::ImmediateExecutor)

    El ejecutor que se utilizará para ejecutar tareas de carga de documentos.



21
22
23
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 21

def sí mismo.immediate_executor
  @@immediate_executor ||= simultáneo::ImmediateExecutor.Nuevo
end

Detalles del método de instancia

#ejecutararreglo<Mongoid::documento>

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.

Carga los registros especificados por @criteria desde la base de datos y los convierte en Mongoid document del tipo @klass.

Este método es llamado por la tarea (posiblemente asíncrona) programada al crear una instancia del cargador. Sin embargo, este método puede ser llamado directamente, si se desea ejecutar la carga inmediatamente en el hilo llamante.

Llamar a este método no cambia el estado del cargador.

Devuelve:

  • (arreglo<Mongoid::Document>)

    Arreglo de documentos cargados desde la base de datos.



151
152
153
154
155
156
157
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 151

def ejecutar
  Documentos = @view.map hacer |doc|
    Fábrica.from_db(@klass, doc, @criteria)
  end
  eager_load(Documentos) si eager_loadable?
  Documentos
end

#¿pendiente?verdadero | falso

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 false o true si el cargador está en estado pendiente.

El estado pendiente significa que la ejecución del cargador ha sido programada, pero aún no ha comenzado.

Devuelve:

  • (true | false)

    verdadero si el cargador está en estado pendiente, en caso contrario, falso.



106
107
108
109
110
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 106

def ¿pendiente?
  @mutex.sincronizar hacer
    @state == :pendiente
  end
end

#¿comenzó?true | false

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 falso o verdadero según si el cargador está en estado iniciado.

Estado iniciado significa que se ha iniciado la ejecución del cargador. Tenga en cuenta que el cargador permanece en este estado incluso después de que la ejecución haya finalizado (con éxito o haya fallado).

Devuelve:

  • (true | false)

    verdadero si el cargador está en estado inicializado; en caso contrario, falso.



120
121
122
123
124
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 120

def ¿Has comenzado?
  @mutex.sincronizar hacer
    @state == :iniciado
  end
end

#desprogramarObjeto

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.

Marca la cargadora como no programada.

Si el cargador está marcado como no programado, no se ejecutará. La única opción para cargar los documentos es llamar al método execute directamente.

Tenga en cuenta que si la ejecución de una tarea ya se ha iniciado, la desprogramación no tiene ningún efecto.



133
134
135
136
137
# Archivo 'lib/mongoid/contextual/mongo/documents_loader.rb', línea 133

def desprogramar
  @mutex.sincronizar hacer
    @state = Cancelado a menos que @state == :iniciado
  end
end