Módulo: Mongo::CursorHost

Incluido en:
Mongo::colección::View::Iterable, base de datos::View, índice::View
Definido en:
lib/mongo/cursor_host.rb

Overview

Preocupación compartida al implementar configuraciones y ajustes para entidades que “hostean” (o generan) cursores.

La clase o módulo que incluya esta preocupación debe implementar:

* timeout_ms -- this must return either the operation level timeout_ms
    (if set) or an inherited timeout_ms from a hierarchically higher
    level (if any).

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

Detalles de los atributos de instancia

#cursornil | Cursor (readonly)

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 el cursor asociado a esta vista, si lo hay.

Devuelve:

  • (nil | Cursor)

    El cursor, si lo hay.



17
18
19
# Archivo 'lib/mongo/cursor_host.rb', línea 17

def cursor
  @cursor
end

#timeout_mode:cursor_lifetime | :iteration (solo lectura)

Devuelve el modo de tiempo de espera que se utilizará en este objeto.

Devuelve:

  • (:cursor_lifetime | :iteration)

    El modo de tiempo de espera a utilizar por este objeto.



21
22
23
# Archivo 'lib/mongo/cursor_host.rb', línea 21

def timeout_mode
  @timeout_mode
end

Detalles del método de instancia

#validate_timeout_mode!(options, forbid: []) ⇒ 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.

Asegúrate de que el modo de tiempo de espera sea adecuado para otras opciones que se hayan dado.

rubocop:deshabilitar métricas

Parámetros:

  • opciones (encriptada)

    Las opciones para inspeccionar.

  • forbid (arreglo<Symbol>) (predeterminado: [])

    La lista de opciones que se prohíben para esta clase.

Aumenta:

  • (ArgumentError)

    si se detectan opciones inconsistentes o incompatibles.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Archivo 'lib/mongo/cursor_host.rb', línea 35

def validate_timeout_mode!(opciones, forbid: [])
  forbid.cada hacer |llave|
    propagar ArgumentError, "#{key} no se permite aquí" si opciones.key?(llave)
  end

  cursor_type = opciones[tipo_de_cursor]
  timeout_mode = opciones[:timeout_mode]

  si timeout_ms
    # "Los cursores con seguimiento solo admiten el valor ITERATION para la
    # opción timeoutMode. Este es el valor por defecto y los drivers DEBEN
    # error si la opción está configurada en CURSOR_LIFETIME.
    si cursor_type
      timeout_mode ||= :iteration
      si timeout_mode == vida_útil_del_cursor
        propagar ArgumentError, 'los cursores con seguimiento solo permiten `timeout_mode: :iteration`'
      end

      # \"Los controladores DEBEN dar error si se establece la opción [maxAwaitTimeMS],\"
      # timeoutMS se establece en un valor distinto de cero y maxAwaitTimeMS es
      # mayor o igual que timeoutMS."
      max_await_time_ms = opciones[; tiempo_máximo_espera_ms] || 0
      si cursor_type == tailable_await && max_await_time_ms >= timeout_ms
        propagar ArgumentError, ':max_await_time_ms no debe ser >=:timeout_ms '
      end
    else
      # "Para cursores no rastreables, el valor predeterminado de timeoutMode
      # es CURSOR_LIFETIME."
      timeout_mode ||= vida_útil_del_cursor
    end
  elsif timeout_mode
    # "Los controladores DEBEN arrojar error si timeoutMode está configurado y timeoutMS no lo está."
    propagar ArgumentError, ':timeout_ms debe establecerse si :timeout_mode está activado'
  end

  si timeout_mode == :iteration && respond_to?(:¿escribir?) && guardar?
    propagar ArgumentError, 'timeout_mode=:iteration no está disponible para pipelines de agregación con $out o $merge'
  end

  # configurarlo como una variable de instancia, en lugar de actualizar las opciones,
  # porque si el tipo de cursor cambia (por ejemplo, mediante #configure()), el nuevo
  # La instancia de vista debe poder seleccionar un timeout_mode por defecto diferente
  # si no se configuró timeout_mode inicialmente.
  @timeout_mode = timeout_mode
end