Clase: Mongo::Cluster::SdamFlow Privado
- Hereda:
-
Objeto
- Objeto
- Mongo::Cluster::SdamFlow
- 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
- #cluster ⇒ Object solo lectura privada
- #original_desc ⇒ Objeto solo lectura privada
- #previous_desc ⇒ Objeto solo lectura privada
-
#topología ⇒ Objeto
solo lectura
privada
La topología almacenada en este atributo puede cambiar varias veces a lo largo de un solo flujo sdam (por ejemplo, desconocido -> RS sin primario -> RS con primario).
- #updated_desc ⇒ Object solo lectura privada
Colapso del resumen del método de instancia
-
#add_servers_from_desc(updated_desc) ⇒ Array<Server>
privada
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.
- #¿esperado? ⇒ Booleano privada
-
#se volvió desconocido? ⇒ Booleano
privada
Devuelve si el servidor cuya descripción procesó este flujo no era desconocido anteriormente y lo es ahora.
-
#check_if_has_primary ⇒ Objeto
privada
Comprueba si el clúster tiene un servidor principal y, si no lo tiene, cambia la topología a ReplicaSetNoPrimary.
-
#commit_changes ⇒ Objeto
privada
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.
- #desconectar_servidores ⇒ Objeto privada
-
#do_remove(dirección_str) ⇒ Objeto
privada
Elimina el servidor especificado de la topología y advierte si la topología termina con una lista de servidores vacía como resultado.
-
#inicializar(clúster, descripción_anterior, descripción_actualizada, esperado: falso) ⇒ SdamFlow
constructor
privada
Una nueva instancia de SdamFlow.
- #publicar_descripción_cambio_evento ⇒ Objeto privada
-
#eliminar ⇒ Objeto
privada
Elimina de la topología el servidor cuya descripción estamos procesando.
-
#remove_servers_not_in_desc(updated_desc) ⇒ Object
privada
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).
- #descripción_del_servidor_cambiada ⇒ Objeto privada
-
#stale_primary? ⇒ Booleano
privada
Si updated_desc es para un primario obsoleto.
-
#start_pool_if_data_bearing ⇒ Objeto
privada
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.
-
#¿topología_efectivamente_cambiada? ⇒ Booleano
privada
Devuelve si la topología cambió significativamente como resultado de la ejecución del flujo SDAM.
-
#update_rs_from_primary ⇒ Object
privada
Actualiza la topología que debe ser un ReplicaSetWithPrimary con información de la descripción del servidor principal.
-
#update_rs_with_primary_from_member ⇒ Object
privada
Actualiza una topología ReplicaSetWithPrimary desde un miembro no principal.
-
#update_rs_without_primary ⇒ Objeto
privada
Actualiza una topología ReplicaSetNoPrimary desde un miembro no principal.
-
#update_server_descriptions ⇒ Objeto
privada
Actualiza las descripciones de todos los servidores cuya dirección coincide con la dirección de updated_desc.
-
#update_unknown_with_standalone ⇒ objeto
privada
Transiciones de tipo de topología desconocida a única, cuando se descubre un servidor independiente.
- #verificar_invariantes ⇒ Objeto privada
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
#cluster ⇒ 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.
40 41 42 |
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 40 def clúster @cluster end |
#original_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.
56 57 58 |
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 56 def descripción original @original_desc end |
#previous_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.
54 55 56 |
# Archivo 'lib/mongo/cluster/sdam_flow.rb', línea 54 def previous_desc @desc_anterior end |
#topología ⇒ 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.
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.
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.
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.
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.
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.
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_primario ⇒ 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.
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., topología.vigilancia, yo) end end |
#commit_changes ⇒ 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.
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., 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., topología.vigilancia, clúster) # Esto envía el evento SDAM clúster.update_topology(topología) end |
#desconectar_servidores ⇒ 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.
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_evento ⇒ 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.
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 |
#eliminar ⇒ 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 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_cambiada ⇒ 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.
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., topología.vigilancia, yo) elsif updated_desc.¿primario? @topology = Topología::Conjunto de réplicas con primario.Nuevo( topología..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..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., 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.
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_bearing ⇒ 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.
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.
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_primary ⇒ 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.
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..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..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..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_member ⇒ 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.
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., topología.vigilancia, yo) end end |
#update_rs_without_primary ⇒ 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.
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..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_descriptions ⇒ 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.
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_standalone ⇒ 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.
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., 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_invariantes ⇒ 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.
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 |