Clase: Mongo::Cluster::SdamFlow Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Ampliado por:
Reenviable
Definido en:
lib/mongo/cluster/sdam_flow.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.

Maneja el flujo SDAM para un evento de cambio de descripción del servidor.

Actualiza las descripciones de los servidores, descripciones de topologías y publica eventos SDAM.

SdamFlow está diseñado para instanciarse una vez por cada evento de cambio de descripción del servidor que necesite procesarse.

Colapso delresumen de atributos de instancia

Colapso del resumen del método de instancia

Detalles del constructor

#inicializar(clúster, descripción_anterior, descripción_actualizada, esperado: falso) ⇒ SdamFlow

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 SdamFlow.



31
32
33
34
35
36
37
38
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 31

def inicializar(clúster, previous_desc, updated_desc, esperado: false)
  @cluster = clúster
  @topology = clúster.topología
  @original_desc = @desc_anterior = previous_desc
  @updated_desc = updated_desc
  @servidores_a_desconectar = []
  @esperado = !!esperado
end

Detalles de los atributos de instancia

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



40
41
42
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 40

def clúster
  @cluster
end

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



56
57
58
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 56

def descripción original
  @original_desc
end

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



54
55
56
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 54

def previous_desc
  @desc_anterior
end

#topologíaObjeto (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.

La topología almacenada en este atributo puede cambiar varias veces durante un flujo sdam (p. ej., desconocido -> RS sin primario -> RS con primario). Los eventos de cambio de topología se envían al final del procesamiento del flujo, de modo que el ejemplo anterior solo publica un evento desconocido -> RS con primario en la aplicación.

Devuelve:

  • Mongo::clúster::topología La topología actual.



52
53
54
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 52

def topología
  @topology
end

#updated_desc => 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.



55
56
57
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 55

def updated_desc
  @updated_desc
end

Detalles del método de instancia

#add_servers_from_desc(desc_actualizado) ⇒ Matriz

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Los servidores se agregan sin monitorizar. El monitorizado debe iniciarse más tarde.

Agrega todos los servidores referenciados en la descripción dada (que se supone que proviene de un servidor principal bueno) que aún no están en el clúster, al clúster.

por separado.

Devuelve:

  • (Array)

    Servidores añadidos al clúster. Este es el conjunto de servidores en los que debe iniciarse la monitorización.



387
388
389
390
391
392
393
394
395
396
397
398
399
400
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 387

def add_servers_from_desc(updated_desc)
  servidores añadidos = []
  %w(Hospedadores pasivos Árbitros).cada hacer |m|
    updated_desc.Enviar(m).cada hacer |dirección_str|
      Si Server = clúster.add(dirección_str, monitor: false)
        servidores añadidos << Server
      end
    end
  end

  verificar_invariantes

  servidores añadidos
end

#¿esperado?Booleano

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:

  • (Booleano)


58
59
60
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 58

def ¿esperado?
  @esperado
end

#se volvió desconocido?Booleano

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 si el servidor cuya descripción procesó este flujo no era desconocido previamente y ahora lo es. Se utiliza para decidir, en particular, si se debe borrar el pool de conexiones del servidor.

Devuelve:

  • (Booleano)


631
632
633
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 631

def ¿se convirtió en desconocido?
  updated_desc.¿desconocido? && !descripción original.¿desconocido?
end

#comprobar_si_tiene_primarioObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Comprueba si el clúster tiene un clúster principal y, de no ser así, cambia la topología a ReplicaSetNoPrimary. La topología debe ser ReplicaSetWithPrimary al invocar este método.



583
584
585
586
587
588
589
590
591
592
593
594
595
596
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 583

def check_if_has_primary
  a no ser que topología.replica_set?
    propagar ArgumentError, "check_if_has_primary solo debe llamarse cuando la topología es un conjunto de réplicas, pero es #{topology.class.name.sub(/.*:: /, '  ' )}"
  end

  primario = servers_list.detectar hacer |Server|
    # Un conjunto primario con un nombre incorrecto no es un conjunto primario
    Server.¿primario? && Server.Descripción.nombre_del_conjunto_de_réplicas == topología.nombre_del_conjunto_de_réplicas
  end
  a no ser que primario
    @topology = Topología::Conjunto de réplicas no primario.Nuevo(
      topología.opciones, topología.vigilancia, yo)
  end
end

#commit_changesObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Publica eventos de cambio de descripción del servidor, actualiza la topología en el clúster y publica eventos de cambio de topología, según sea necesario en función de las operaciones realizadas durante el procesamiento del flujo SDAM.



507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 507

def confirmar_cambios
  # La secuencia de eventos visible para la aplicación debe ser la siguiente:
  #
  # 1. Cambio de descripción para el servidor que estamos procesando;
  # 2. Cambio de topología, si lo hay;
  # 3. Cambios en la descripción de otros servidores, si los hay.
  #
  # La parte complicada aquí es que los cambios en la descripción del servidor son
  # no todos se procesan juntos

  evento de cambio de descripción de publicación
  grupo de inicio si rodamiento de datos

  evento_de_topología_cambiada_publicado = false
  Si !topología.¿igual?(clúster.topología) || @necesita_evento_cambiado_de_topología
    #Estamos a punto de publicar el evento de cambio de topología.
    # Recrear la instancia de topología para obtener sus descripciones de servidor
    # A hoy.
    @topology = topología.clase.Nuevo(topología.opciones, topología.vigilancia, clúster)
    # Esto envía el evento SDAM
    clúster.update_topology(topología)
    evento_de_topología_cambiada_publicado = true
    @necesita_evento_cambiado_de_topología = false
  end

  # Si se modifica la descripción de un servidor, evento de cambio de descripción de topología
  # debe publicarse con las topologías anterior y siguiente siendo de
  # el mismo tipo, a menos que ya hayamos publicado el evento de cambio de topología
  Si evento_de_topología_cambiada_publicado
    return
  end

  Si updated_desc.¿desconocido? && previous_desc.¿desconocido?
    return
  end
  Si updated_desc.id_del_objeto == previous_desc.id_del_objeto
    return
  end

  a no ser que ¿topología_efectivamente_cambiada?
    return
  end

  # Si estamos aquí, ha habido un cambio en las descripciones de los servidores.
  # en nuestra topología, pero la clase de topología no ha cambiado.
  # Publicar el evento de cambio de topología y recrear la topología
  # Obtenga la nueva lista de descripciones de servidores.
  @topology = topología.clase.Nuevo(topología.opciones, topología.vigilancia, clúster)
  # Esto envía el evento SDAM
  clúster.update_topology(topología)
end

#desconectar_servidoresObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



559
560
561
562
563
564
565
566
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 559

def desconectar_servidores
  mientras Server = @servidores_a_desconectar.cambio
    Si Server.¿conectado?
      # No publicar evento de cierre de servidor, ya que esto ya se hizo
      Server.¡desconectar!
    end
  end
end

#do_remove(dirección_str) ⇒ 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.

Elimina el servidor especificado de la topología y advierte si la topología termina con una lista de servidores vacía como resultado



434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 434

def do_remove(dirección_str)
  servidores = clúster.Remover(dirección_str, desconectar: false)
  servidores.cada hacer |Server|
    # Borre la descripción para que el servidor quede marcado como desconocido.
    Server.descripción clara

    # Necesitamos publicar el evento de cierre del servidor aquí, pero no podemos cerrarlo
    # el servidor porque podría ser el servidor el que posea el monitor en
    # cuyo hilo este flujo está actualmente ejecutando, en cuyo caso se cierra
    # el servidor puede finalizar el hilo y dejar el procesamiento de SDAM
    # incompleto. Por lo tanto, debemos eliminar el servidor del clúster.
    # publica el evento, pero no llama a desconectar en el servidor hasta que
    # el final cuando todo el procesamiento se ha completado.
    evento publicar_sdam(
      Mongo::Monitoring::SERVIDOR CERRADO,
      Mongo::Monitoring::Evento::ServerClosed.Nuevo(Server.dirección, clúster.topología)
    )
  end
  @servidores_a_desconectar += servidores
  Si servers_list.¿vacío?
    advertencia de registro(
      "Latopología ahora no tiene servidores; es probable que se deba a una mala configuración del clúster o de laaplicación".
    )
  end
end

#publicar_descripción_cambio_eventoObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 460

def evento de cambio de descripción de publicación
  # Este método se puede invocar cuando la descripción del servidor cambia definitivamente
  # pero antes de que se actualice la topología. Por lo tanto, comprobamos ambos
  # cambios en la descripción del servidor y cambios generales en la topología. Cuando esto
  # El método se llama al final del flujo SDAM como parte de "confirmar cambios"
  # paso, el cambio de descripción del servidor se incorpora en la topología
  # cambiar.
  a no ser que @server_description_changed || ¿topología_efectivamente_cambiada?
    return
  end

  # updated_desc aquí puede no ser la descripción que recibimos de
  # el servidor - en caso de una primaria obsoleta, el servidor se reportó a sí mismo
  # como principal pero updated_desc aquí será desconocido.

  # Solíamos no notificar sobre cambios de servidor Desconocido -> Desconocido.
  # Técnicamente, estos son cambios de estado válidos (o al menos tan válidos como
  # otros cambios en la descripción del servidor cuando la descripción no ha
  # cambió significativamente pero los eventos aún se publican).
  # La versión actual del controlador notifica en Desconocido -> Desconocido
  # transiciones.

  # Evite enviar eventos cuando la descripción actualizada sea la misma que
  # descripción anterior. Esto permite que este método se llame varias veces.
  # veces en el flujo cuando los eventos deben publicarse, sin
  # Preocuparse por si hay cambios no publicados.
  Si updated_desc.id_del_objeto == previous_desc.id_del_objeto
    return
  end

  evento publicar_sdam(
    ::Mongo::Monitoring::DESCRIPCIÓN DEL SERVIDOR CAMBIADA,
    ::Mongo::Monitoring::Evento::Descripción del servidor modificada.Nuevo(
      updated_desc.dirección,
      topología,
      previous_desc,
      updated_desc,
      esperado: ¿esperado?,
    )
  )
  @desc_anterior = updated_desc
  @necesita_evento_cambiado_de_topología = true
end

#eliminarObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Elimina de la topología el servidor cuya descripción estamos procesando.



427
428
429
430
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 427

def Remover
  evento de cambio de descripción de publicación
  do_remove(updated_desc.dirección.a_s)
end

#remove_servers_not_in_desc(updated_desc) ⇒ 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.

Elimina de la topología los servidores que no están presentes en la descripción del servidor dada (que se supone que proviene de un servidor primario bueno).



405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 405

def eliminar_servidores_no_en_desc(updated_desc)
  direcciones de descripción actualizadas = %w(Hospedadores pasivos Árbitros).map hacer |m|
    updated_desc.Enviar(m)
  end.aplanar
  servers_list.cada hacer |Server|
    a no ser que direcciones de descripción actualizadas.¿incluir?(dirección_str = Server.dirección.a_s)
      updated_host = updated_desc.dirección.a_s
      Si updated_desc.me && updated_desc.me != updated_host
        updated_host += " (autoidentificado como #{updated_desc.me})"
      end
      advertencia de registro(
        "Eliminandoel servidor #{address_str} porque no está entre los hosts informados por el servidor principal" +
        "#{updated_host}. Los hosts reportados son: " +
        updated_desc.Hospedadores.Join(', ')
      )
      do_remove(dirección_str)
    end
  end
end

#descripción_del_servidor_cambiadaObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 93

def server_description_changed
  @descripciones_del_servidor_anterior = servers_list.map hacer |Server|
    [Server.dirección.a_s, Server.Descripción]
  end

  a no ser que descripciones del servidor de actualización
    # Todas las transiciones requieren que el servidor cuyo updated_desc estamos
    # el procesamiento todavía está en el clúster (es decir, no se eliminó como resultado)
    # de procesamiento de otra respuesta, potencialmente de manera concurrente).
    # Si update_server_descriptions devolvió false, no tenemos servidores.
    # en la topología de la descripción que estamos procesando, deténgase.
    return
  end

  caso topología
  Cuando Topología::Balance de carga
    @updated_desc = ::Mongo::Servidor::Descripción::Balanceador de carga.Nuevo(
      updated_desc.dirección,
    )
    descripciones del servidor de actualización
  Cuando Topología::Single
    Si topología.nombre_del_conjunto_de_réplicas
      Si updated_desc.nombre_del_conjunto_de_réplicas != topología.nombre_del_conjunto_de_réplicas
        advertencia de registro(
          "Elservidor #{updated_desc.address.to_s} tiene un nombre de conjunto de réplicas incorrecto' #{updated_desc. replica_set_name} '; se esperaba' #{topology.replica_set_name} ' "
        )
        @updated_desc = ::Mongo::Servidor::Descripción.Nuevo(
          updated_desc.dirección,
          {},
          tiempo promedio de ida y vuelta: updated_desc.tiempo promedio de ida y vuelta,
          tiempo mínimo de ida y vuelta: updated_desc.tiempo mínimo de ida y vuelta
        )
        descripciones del servidor de actualización
      end
    end
  Cuando Topología::Desconocido
    Si updated_desc.¿autónomo?
      actualización_desconocida_con_independiente
    elsif updated_desc.mongos?
      @topology = Topología::Fragmentado.Nuevo(topología.opciones, topología.vigilancia, yo)
    elsif updated_desc.¿primario?
      @topology = Topología::Conjunto de réplicas con primario.Nuevo(
        topología.opciones.unir(nombre_del_conjunto_de_réplicas: updated_desc.nombre_del_conjunto_de_réplicas),
        topología.vigilancia, yo)
      update_rs_from_primary
    elsif updated_desc.¿secundario? || updated_desc.¿árbitro? || updated_desc.¿otro?
      @topology = Topología::Conjunto de réplicas no primario.Nuevo(
        topología.opciones.unir(nombre_del_conjunto_de_réplicas: updated_desc.nombre_del_conjunto_de_réplicas),
        topología.vigilancia, yo)
      actualización_rs_sin_primaria
    end
  Cuando Topología::Fragmentado
    a no ser que updated_desc.¿desconocido? || updated_desc.mongos?
      advertencia de registro(
        "Eliminandoel servidor #{updated_desc.address.to_s} porque es del tipo incorrecto (#{updated_desc.server_type.to_s.upcase}) - se esperaba SHARDED"
      )
      Remover
    end
  Cuando Topología::Conjunto de réplicas con primario
    Si updated_desc.¿autónomo? || updated_desc.mongos?
      advertencia de registro(
        "Removiendo el servidor #{updated_desc.address.to_s} porque es del tipo incorrecto (#{updated_desc.server_type.to_s.upcase}) - se esperaba un nodo del set de réplicas"
      )
      Remover
      check_if_has_primary
    elsif updated_desc.¿primario?
      update_rs_from_primary
    elsif updated_desc.¿secundario? || updated_desc.¿árbitro? || updated_desc.¿otro?
      actualizar_rs_con_miembro_principal_de_miembro
    else
      check_if_has_primary
    end
  Cuando Topología::Conjunto de réplicas no primario
    Si updated_desc.¿autónomo? || updated_desc.mongos?
      advertencia de registro(
        "Removiendo el servidor #{updated_desc.address.to_s} porque es del tipo incorrecto (#{updated_desc.server_type.to_s.upcase}) - se esperaba un nodo del set de réplicas"
      )
      Remover
    elsif updated_desc.¿primario?
      # Aquí cambiamos el tipo de topología a RS con primario, sin embargo
      # mientras procesamos updated_desc podemos encontrar que su nombre RS
      # no coincide con nuestro nombre RS actual. Por esta razón
      # Es imperativo NO pasar el nombre RS de updated_desc a
      # Constructor de topología aquí.
      # Durante el procesamiento podemos eliminar el servidor cuyo updated_desc
      #estamos procesando (por ejemplo, nuevamente el caso de falta de coincidencia del nombre RS),
      # en cuyo caso el tipo de topología volverá a RS sin primaria
      # en el paso check_if_has_primary.
      @topology = Topología::Conjunto de réplicas con primario.Nuevo(
        # No pase el nombre RS de updated_desc aquí
        topología.opciones,
        topología.vigilancia, yo)
      update_rs_from_primary
    elsif updated_desc.¿secundario? || updated_desc.¿árbitro? || updated_desc.¿otro?
      actualización_rs_sin_primaria
    end
  else
    propagar ArgumentError, "Topologíadesconocida #{topology.class}"
  end

  verificar_invariantes
  confirmar_cambios
  desconectar_servidores
end

#stale_primary?Booleano

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Si updated_desc es para un primario obsoleto.

Devuelve:

  • (Booleano)


599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 599

def stale_primary?
  Si updated_desc.versión máxima del cable >= 17
    Si updated_desc.id_elección.nil? && !topología.id_máximo_de_elección.nil?
      return true
    end
    Si updated_desc.id_elección && topología.id_máximo_de_elección && updated_desc.id_elección < topología.id_máximo_de_elección
      return true
    end
    Si updated_desc.id_elección == topología.id_máximo_de_elección
      Si updated_desc.establecer_versión.nil? && !topología.versión_máxima_del_conjunto.nil?
        return true
      end
      Si updated_desc.establecer_versión && topología.versión_máxima_del_conjunto && updated_desc.establecer_versión < topología.versión_máxima_del_conjunto
        return true
      end
    end
  else
    Si updated_desc.id_elección && updated_desc.establecer_versión
      Si topología.versión_máxima_del_conjunto && topología.id_máximo_de_elección &&
          (updated_desc.establecer_versión < topología.versión_máxima_del_conjunto ||
              (updated_desc.establecer_versión == topología.versión_máxima_del_conjunto &&
                  updated_desc.id_elección < topología.id_máximo_de_elección))
        return true
      end
    end
  end
  false
end

#start_pool_if_data_bearingobjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Si el servidor que se está procesando se identifica como portador de datos, crea el grupo de conexiones del servidor para que pueda comenzar a poblarse.



570
571
572
573
574
575
576
577
578
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 570

def grupo de inicio si rodamiento de datos
  return Si !updated_desc.¿datos_de_portador?

  servers_list.cada hacer |Server|
    Si Server.dirección == @updated_desc.dirección
      Server.Piscina
    end
  end
end

#¿topología_efectivamente_cambiada?Booleano

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 si la topología cambió significativamente como resultado de la ejecución del flujo SDAM.

La especificación define la igualdad topológica mediante la igualdad de tipos de topología y descripciones de servidor en cada topología. Esta definición no es utilizable porque nuestros objetos de topología no contienen descripciones de servidor y, en cambio, están activos. Por lo tanto, debemos almacenar la lista completa de descripciones de servidor al inicio del flujo SDAM y compararlas con las actuales.

Devuelve:

  • (Booleano)


644
645
646
647
648
649
650
651
652
653
654
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 644

def ¿topología_efectivamente_cambiada?
  a no ser que topología.¿igual?(clúster.topología)
    return true
  end

  descripciones del servidor = servers_list.map hacer |Server|
    [Server.dirección.a_s, Server.Descripción]
  end

  @descripciones_del_servidor_anterior != descripciones del servidor
end

#update_rs_from_primaryObject

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Actualiza la topología que debe ser un ReplicaSetWithPrimary con información de la descripción del servidor principal.

Este método no cambia el tipo de topología a ReplicaSetWithPrimary: esto debe haberse realizado antes de llamar a este método.

Si se determina que el servidor principal cuya descripción se está procesando está obsoleto, este método cambiará la descripción del servidor y el tipo de topología a desconocidos.



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 221

def update_rs_from_primary
  Si topología.nombre_del_conjunto_de_réplicas.nil?
    @topology = Topología::Conjunto de réplicas con primario.Nuevo(
      topología.opciones.unir(nombre_del_conjunto_de_réplicas: updated_desc.nombre_del_conjunto_de_réplicas),
      topología.vigilancia, yo)
  end

  Si topología.nombre_del_conjunto_de_réplicas != updated_desc.nombre_del_conjunto_de_réplicas
    advertencia de registro(
      "Removiendo servidor #{desc_actualizado.dirección.to_s} porque tiene un " +
      "nombrede conjunto de réplicas incorrecto' #{updated_desc. replica_set_name} '; " +
      "se esperaba' #{topology. replica_set_name} ' "
    )
    Remover
    check_if_has_primary
    return
  end

  Si stale_primary?
    @updated_desc = ::Mongo::Servidor::Descripción.Nuevo(
      updated_desc.dirección,
      {},
      tiempo promedio de ida y vuelta: updated_desc.tiempo promedio de ida y vuelta,
      tiempo mínimo de ida y vuelta: updated_desc.tiempo mínimo de ida y vuelta
    )
    descripciones del servidor de actualización
    check_if_has_primary
    return
  end

  Si updated_desc.versión máxima del cable >= 17
    @topology = Topología::Conjunto de réplicas con primario.Nuevo(
      topología.opciones.unir(
        id_máximo_de_elección: updated_desc.id_elección,
        versión_máxima_del_conjunto: updated_desc.establecer_versión
      ), topología.vigilancia, yo)
  else
    id_máximo_de_elección = topología.nuevo_id_máximo_de_elección(updated_desc)
    versión_máxima_del_conjunto = topología.nueva_versión_máxima_del_conjunto(updated_desc)

    Si id_máximo_de_elección != topología.id_máximo_de_elección ||
      versión_máxima_del_conjunto != topología.versión_máxima_del_conjunto
    entonces
      @topology = Topología::Conjunto de réplicas con primario.Nuevo(
        topología.opciones.unir(
          id_máximo_de_elección: id_máximo_de_elección,
          versión_máxima_del_conjunto: versión_máxima_del_conjunto
        ), topología.vigilancia, yo)
    end
  end

  # En este punto hemos aceptado la descripción actualizada del servidor.
  # y la topología (ambas son primarias). Confirme estos cambios para que
  # sus respectivos eventos SDAM se publican antes que los eventos SDAM para
  # adiciones/eliminaciones de servidores que siguen
  evento de cambio de descripción de publicación

  servers_list.cada hacer |Server|
    Si Server.dirección != updated_desc.dirección
      Si Server.¿primario?
        Server.update_description(
          ::Mongo::Servidor::Descripción.Nuevo(
            Server.dirección,
            {},
            tiempo promedio de ida y vuelta: Server.Descripción.tiempo promedio de ida y vuelta,
            tiempo mínimo de ida y vuelta: updated_desc.tiempo mínimo de ida y vuelta
          )
        )
      end
    end
  end

  servidores = add_servers_from_desc(updated_desc)
  eliminar_servidores_no_en_desc(updated_desc)

  check_if_has_primary

  servidores.cada hacer |Server|
    Server.monitorización de inicio
  end
end

#update_rs_with_primary_from_memberObject

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Actualiza una topología ReplicaSetWithPrimary desde un miembro no principal.



304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 304

def actualizar_rs_con_miembro_principal_de_miembro
  Si topología.nombre_del_conjunto_de_réplicas != updated_desc.nombre_del_conjunto_de_réplicas
    advertencia de registro(
      "Removiendo servidor #{desc_actualizado.dirección.to_s} porque tiene un " +
      "nombrede conjunto de réplicas incorrecto(#{updated_desc. replica_set_name}); " +
      "Elnombre del conjunto actual es #{topology. replica_set_name }"
    )
    Remover
    check_if_has_primary
    return
  end

  Si updated_desc.¿me_desajuste?
    advertencia de registro(
      "Removiendo servidor #{updated_desc.address.to_s} porque " +
      "se reportó como #{updated_desc.me}"
    )
    Remover
    check_if_has_primary
    return
  end

  tener_primario = false
  servers_list.cada hacer |Server|
    Si Server.¿primario?
      tener_primario = true
      break
    end
  end

  a no ser que tener_primario
    @topology = Topología::Conjunto de réplicas no primario.Nuevo(
      topología.opciones, topología.vigilancia, yo)
  end
end

#update_rs_without_primaryObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Actualiza una topología ReplicaSetNoPrimary desde un miembro no principal.



341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 341

def actualización_rs_sin_primaria
  Si topología.nombre_del_conjunto_de_réplicas.nil?
    @topology = Topología::Conjunto de réplicas no primario.Nuevo(
      topología.opciones.unir(nombre_del_conjunto_de_réplicas: updated_desc.nombre_del_conjunto_de_réplicas),
      topología.vigilancia, yo)
  end

  Si topología.nombre_del_conjunto_de_réplicas != updated_desc.nombre_del_conjunto_de_réplicas
    advertencia de registro(
      "Removiendo servidor #{desc_actualizado.dirección.to_s} porque tiene un " +
      "nombrede conjunto de réplicas incorrecto(#{updated_desc. replica_set_name}); " +
      "Elnombre del conjunto actual es #{topology. replica_set_name }"
    )
    Remover
    return
  end

  evento de cambio de descripción de publicación

  servidores = add_servers_from_desc(updated_desc)

  confirmar_cambios

  servidores.cada hacer |Server|
    Server.monitorización de inicio
  end

  Si updated_desc.¿me_desajuste?
    advertencia de registro(
      "Removiendo servidor #{updated_desc.address.to_s} porque " +
      "se reportó como #{updated_desc.me}"
    )
    Remover
    return
  end
end

#update_server_descriptionsObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Actualiza las descripciones de todos los servidores cuya dirección coincide con la dirección de updated_desc.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 66

def descripciones del servidor de actualización
  servers_list.cada hacer |Server|
    Si Server.dirección == updated_desc.dirección
      # El flujo SDAM debe ejecutarse cuando la versión de topología está en la nueva descripción
      # es igual a la versión de topología actual, según el ejemplo en
      # https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md#what-is-the-purpose-of-topologyversion
      a no ser que updated_desc.topology_version_gte?(Server.Descripción)
        return false
      end

      @server_description_changed = Server.Descripción != updated_desc

      # Actualice siempre la descripción del servidor, de modo que los campos que no
      # afectan las comparaciones de igualdad de descripción pero son parte de la
      # Se actualizan las descripciones.
      Server.update_description(updated_desc)
      Server.update_last_scan

      # Si no había diferencia de contenido entre las descripciones, nosotros
      # todavía es necesario ejecutar sdam flow, pero si el flujo no produce ningún cambio
      # En topología omitiremos el envío de eventos.
      return true
    end
  end
  false
end

#update_unknown_with_standaloneObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Transiciones de tipo de topología desconocida a única, cuando se descubre un servidor independiente.



200
201
202
203
204
205
206
207
208
209
210
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 200

def actualización_desconocida_con_independiente
  Si semillas.longitud == 1
    @topology = Topología::Single.Nuevo(
      topología.opciones, topología.vigilancia, yo)
  else
    advertencia de registro(
      "Eliminandoel servidor #{updated_desc.address.to_s} porque es independiente y tenemos múltiples semillas (#{seeds.length} )"
    )
    Remover
  end
end

#verificar_invariantesObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



656
657
658
659
660
661
662
663
664
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 656

def verificar_invariantes
  Si Mongo::Lint.¿activado?
    Si clúster.topología.¿soltero?
      Si clúster.servers_list.longitud > 1
        propagar Mongo::Error::LintError, "Intentandocrear una única topología con múltiples servidores: #{cluster.servers_list}"
      end
    end
  end
end