Tema anterior: Desactivación de la pulsación en los escenarios de alta disponibilidad: stop_is_alive()Tema siguiente: Activación de las pulsaciones en los escenarios de alta disponibilidad: start_is_alive()


Conmutación de los escenarios de alta disponibilidad: switchover()

La función de API switchover permite realizar operaciones de conmutación.

Con escenarios de alta disponibilidad y de todo el sistema, se pueden realizar operaciones de conmutación a cualquier servidor réplica. Cuando desee cambiar a servidores réplica que no dispongan de ninguna conmutación por error, llame a la API execute_action antes de llamar a la API de conmutación.

Nota: La API execute_action se describe en los ejemplos.

Argumentos

La función de API switchover incluye los argumentos descritos en la tabla siguiente:

Nombre

Tipo

Descripción

session_id

uint

El ID de sesión que se ha devuelto llamando a la API create_session.

scenario_id

uint

El ID de escenario para el cual desea realizar las operaciones de conmutación.

execute_sync

bool

Regula si debe llamarse a esta API sincrónica o asincrónicamente.

run_reverse_scenario

bool

Ejecute o no ejecute el escenario inverso después de que se produzca la operación de conmutación.

err_message

out string

Contiene el motivo del error cuando se produce un error en esta API.

Valores de retorno

El tipo de valor de retorno es booleano. Cuando el valor de retorno es verdadero, la API finalizará correctamente. Cuando el valor de retorno es falso, la API no finaliza correctamente. Si el valor de retorno es falso, revise el mensaje para determinar el motivo por el cual la API es errónea.

Ejemplos

Ejemplo 1

public bool switchover_example()
        {
            try
            {
                uint scenario_id = _ha_scenario_id;
                string err_messages = "";
                bool execute_sync = true;
                bool run_reverse_scenario = false;
                return get_mng().switchover(_session_id, scenario_id, execute_sync, run_reverse_scenario, out err_messages);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return false;
        }

Ejemplo 2

public bool switchover_2nd_example()
        {
            try
            {
set_xcmd_data("switchover", "switchover_index","3" );
                uint scenario_id = _ha_scenario_id;
                string err_messages = "";
                bool execute_sync = true;
                bool run_reverse_scenario = false;
                return get_mng().switchover(_session_id, scenario_id, execute_sync, run_reverse_scenario, out err_messages);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
            return false;
        }

Ejemplo 3

De forma predeterminada, Replication y High Availability realiza operaciones de conmutación en la conmutación por error predeterminada y en los servidores réplica. Con los escenarios de alta disponibilidad y de todo el sistema, se puede cambiar a los servidores réplica que no dispongan de ninguna conmutación por error. Sin embargo, cuando desee cambiar a los servidores que no dispongan de ninguna conmutación por error mediante la API de conmutación, llame a la API execute_action antes de llamar a la API de conmutación, tal y como aparece en el ejemplo siguiente:

set_xcmd_data("switchover", "switchover_index","3" );

public bool set_xcmd_data(string cmd_name_str,string cmd_data_str,string cmd_value_str)
        {
            try
            {
                string result_data = "";
                string action_data;

                XmlDocument doc = new XmlDocument();
                XmlNode actions = doc.CreateNode(XmlNodeType.Element, xomngapi.WANSync_c.xo_actions, "");

                XmlNode commonNode = doc.CreateNode(XmlNodeType.Element, xomngapi.WANSync_c.action_common_lab, "");
                XmlAttribute attrSession = doc.CreateAttribute(xomngapi.WANSync_c.action_com_session_id);
                XmlAttribute attrScenario = doc.CreateAttribute(xomngapi.WANSync_c.action_com_scenario_id);
                XmlAttribute attrHostindex = doc.CreateAttribute(xomngapi.WANSync_c.action_com_host_index);
                XmlAttribute attrUsedfor = doc.CreateAttribute(xomngapi.WANSync_c.action_used_for);

                attrSession.Value = xomngapi.WANSync_c.WANSync.session_id.ToString();
                attrScenario.Value = this.id.ToString();
                attrUsedfor.Value = xomngapi.WANSync_c.action_x_command_data;

                commonNode.Attributes.Append(attrSession);
                commonNode.Attributes.Append(attrScenario);
                commonNode.Attributes.Append(attrHostindex);
                commonNode.Attributes.Append(attrUsedfor);

                XmlNode xo_cmd = doc.CreateNode(XmlNodeType.Element, xomngapi.WANSync_c.xo_cmd, "");
                XmlAttribute cmd_name = doc.CreateAttribute(xomngapi.WANSync_c.action_cmd_name);
                XmlAttribute cmd_data = doc.CreateAttribute(xomngapi.WANSync_c.action_cmd_data);
                XmlAttribute cmd_value = doc.CreateAttribute(xomngapi.WANSync_c.action_cmd_value);

                cmd_name.Value = cmd_name_str;
                cmd_data.Value = cmd_data_str;
                cmd_value.Value = cmd_value_str;

                xo_cmd.Attributes.Append(cmd_name);
                xo_cmd.Attributes.Append(cmd_data);
                xo_cmd.Attributes.Append(cmd_value);

                actions.AppendChild(commonNode);
                commonNode.AppendChild(xo_cmd);
                doc.AppendChild(actions);
                action_data = doc.OuterXml;
                string error;
                return get_mng().execute_action(action_data, true, out result_data, out error);
            }
            catch (System.Exception)
            {
                return false;
            }