int remove_gtmSlave(bool clean_opt) { FILE *f; /* Check if gtm_slave is configured */ if (!isVarYes(VAR_gtmSlave) || !sval(VAR_gtmSlaveServer) || is_none(sval(VAR_gtmSlaveServer))) { elog(ERROR, "ERROR: GTM slave is not configured.\n"); return 1; } /* Check if gtm_slave is not running */ if (!do_gtm_ping(sval(VAR_gtmSlaveServer), atoi(sval(VAR_gtmSlavePort)))) { elog(ERROR, "ERROR: GTM slave is now running. Cannot remove it.\n"); return 1; } elog(NOTICE, "Removing gtm slave.\n"); /* Clean */ if (clean_opt) clean_gtm_slave(); /* Reconfigure */ reset_var(VAR_gtmSlave); assign_sval(VAR_gtmSlave, Strdup("n")); reset_var(VAR_gtmSlaveServer); assign_sval(VAR_gtmSlaveServer, Strdup("none")); reset_var(VAR_gtmSlavePort); assign_sval(VAR_gtmSlavePort, Strdup("-1")); reset_var(VAR_gtmSlaveDir); assign_sval(VAR_gtmSlaveDir, Strdup("none")); /* Write the configuration file and bakup it */ if ((f = fopen(pgxc_ctl_config_path, "a")) == NULL) { /* Should it be panic? */ elog(ERROR, "ERROR: cannot open configuration file \"%s\", %s\n", pgxc_ctl_config_path, strerror(errno)); return 1; } fprintf(f, "#===================================================\n" "# pgxc configuration file updated due to GTM slave removal\n" "# %s\n", timeStampString(date, MAXTOKEN+1)); fprintSval(f, VAR_gtmSlave); fprintSval(f, VAR_gtmSlaveServer); fprintSval(f, VAR_gtmSlavePort); fprintSval(f, VAR_gtmSlaveDir); fprintf(f, "%s", "#----End of reconfiguration -------------------------\n"); fclose(f); backup_configuration(); elog(NOTICE, "Done.\n"); return 0; }
/* * Removes datanode slave from pgxc_ctl configuration. */ static void emptyDatanodeSlaves() { int ii; reset_var_val(VAR_datanodeSlave, "n"); reset_var(VAR_datanodeSlaveServers); reset_var(VAR_datanodeSlaveDirs); reset_var(VAR_datanodeArchLogDirs); for (ii = 0; ii < arraySizeName(VAR_datanodeSlaveServers); ii++) { add_val(find_var(VAR_datanodeSlaveServers), "none"); add_val(find_var(VAR_coordSlaveDirs), "none"); add_val(find_var(VAR_coordArchLogDirs), "none"); } }
/* * Test each node and build target server list */ void makeServerList(void) { /* Initialize */ reset_var(VAR_allServers); /* GTM Master */ addServer(aval(VAR_gtmMasterServer)); /* GTM Slave */ if (isVarYes(VAR_gtmSlave)) addServer(aval(VAR_gtmSlaveServer)); /* GTM_Proxy */ if (isVarYes(VAR_gtmProxy)) addServer(aval(VAR_gtmProxyServers)); /* Coordinator Master */ if (find_var(VAR_coordMasterServers)) addServer(aval(VAR_coordMasterServers)); /* Coordinator Slave */ if (isVarYes(VAR_coordSlave)) addServer(aval(VAR_coordSlaveServers)); /* Datanode Master */ addServer(aval(VAR_datanodeMasterServers)); /* Datanode Slave */ if (isVarYes(VAR_datanodeSlave)) addServer(aval(VAR_datanodeSlaveServers)); /* Should add secondary slaves */ }
static void setDefaultIfNeeded(char *name, char *val) { if (!find_var(name) || !sval(name)) { if (val) reset_var_val(name, val); else reset_var(name); } }
/* * Remove gtm proxies. Used when a node crashes. * Because gtm_proxy is expected to be running at any target * server, we don't have gtm_proxy slaves. * We can just initialize gtm_proy using gtminit, configure and * run it. */ static void emptyGtmProxies() { int ii; reset_var_val(VAR_gtmProxy, "n"); reset_var(VAR_gtmProxyServers); reset_var(VAR_gtmProxyNames); reset_var(VAR_gtmProxyPorts); reset_var(VAR_gtmProxyDirs); reset_var_val(VAR_gtmPxyExtraConfig, "none"); reset_var(VAR_gtmPxySpecificExtraConfig); for (ii = 0; ii < arraySizeName(VAR_allServers); ii++) { add_val(find_var(VAR_gtmProxyServers), "none"); add_val(find_var(VAR_gtmProxyNames), "none"); add_val(find_var(VAR_gtmProxyPorts), "-1"); add_val(find_var(VAR_gtmProxyDirs), "none"); add_val(find_var(VAR_gtmPxyExtraConfig), "none"); } }
void Arth_mode() { key=NO_KEY; while (key==NO_KEY) { key=Keypad_getkey(); } switch(key) { case '1':case'2':case'3':case'4':case'5': case'6':case'7':case'8':case'9':case'0': Detect_numbers(); LCD_Send_A_Character(key); if(save_op_check==false)save_last_OP(); if(addition_op==true){*ptr_inputs=key;ptr_inputs++;}///////////////// break; case AOP: swap_operation(); if(save_inp_check==false) save_last_number(); break; case CLC: LCD_clear_screen(); reset_var(); break; case OP2 : if (Number!=0) { LCD_clear_character(); Detect_numbers(); } break; case '=': save_last_number(); //save_last_OP(); if(addition_op==true)/////////////////// { LCD_clear_screen();///////////////// disp_addition_op();///////////////// init_addtion_op();////////////////// } //////////////// addition_op=true; calculate (); Print_result (); inp_counter=1; op_counter=0; break; case OP7: mode='0'; // print1_check = true ; print2_check = false ; force_key='1'; break; } }
void reset_var_val(char *name, char *val) { reset_var(name); add_val(find_var(name), val); }
/* * Add gtm proxy: to be used after all the configuration is done. * * This function only maintains internal configuration, updte configuration file, * and make backup if configured. You should run init and start it separately. */ int add_gtmProxy(char *name, char *host, int port, char *dir) { char port_s[MAXTOKEN+1]; char date[MAXTOKEN+1]; FILE *f; char **nodelist = NULL; int rc; if (is_none(host)) { elog(ERROR, "ERROR: Cannot add gtm proxy with the name \"none\".\n"); return 1; } if (is_none(dir)) { elog(ERROR, "ERROR: Cannot add gtm proxy with the directory \"none\".\n"); return 1; } if (checkSpecificResourceConflict(name, host, port, dir, TRUE)) { elog(ERROR, "ERROR: New specified name:%s, host:%s, port:%d and dir:\"%s\" conflicts with existing node.\n", name, host, port, dir); return 1; } if (!isVarYes(VAR_gtmProxy)) { assign_sval(VAR_gtmProxy, Strdup("y")); reset_var(VAR_gtmProxyNames); } add_val(find_var(VAR_gtmProxyNames), Strdup(name)); add_val(find_var(VAR_gtmProxyServers), Strdup(host)); snprintf(port_s, MAXTOKEN, "%d", port); add_val(find_var(VAR_gtmProxyPorts), Strdup(port_s)); add_val(find_var(VAR_gtmProxyDirs), Strdup(dir)); add_val(find_var(VAR_gtmPxySpecificExtraConfig), Strdup("none")); makeServerList(); if ((f = fopen(pgxc_ctl_config_path, "a")) == NULL) { /* Should it be panic? */ elog(ERROR, "ERROR: cannot open configuration file \"%s\", %s\n", pgxc_ctl_config_path, strerror(errno)); return 1; } fprintf(f, "#===================================================\n" "# pgxc configuration file updated due to GTM proxy (%s) addition\n" "# %s\n", name, timeStampString(date, MAXTOKEN+1)); fprintSval(f, VAR_gtmProxy); fprintAval(f, VAR_gtmProxyNames); fprintAval(f, VAR_gtmProxyServers); fprintAval(f, VAR_gtmProxyPorts); fprintAval(f, VAR_gtmProxyDirs); fprintAval(f, VAR_gtmPxySpecificExtraConfig); fprintf(f, "%s", "#----End of reconfiguration -------------------------\n"); fclose(f); AddMember(nodelist, name); init_gtm_proxy(nodelist); rc = start_gtm_proxy(nodelist); CleanArray(nodelist); return rc; }
/* * Failover the gtm ------------------------------------------------------ */ int failover_gtm(void) { char date[MAXTOKEN+1]; char *stdIn; int rc; FILE *f; elog(INFO, "Failover gtm\n"); if (!isVarYes(VAR_gtmSlave) || (sval(VAR_gtmSlaveServer) == NULL) || is_none(sval(VAR_gtmSlaveServer))) { elog(ERROR, "ERROR: GTM slave is not configured. Cannot failover.\n"); return(1); } if (do_gtm_ping(sval(VAR_gtmSlaveServer), atoi(sval(VAR_gtmSlavePort))) != 0) { elog(ERROR, "ERROR: GTM slave is not running\n"); return(1); } /* Promote the slave */ elog(NOTICE, "Running \"gtm_ctl promote -Z gtm -D %s\"\n", sval(VAR_gtmSlaveDir)); rc = doImmediate(sval(VAR_gtmSlaveServer), NULL, "gtm_ctl promote -Z gtm -D %s", sval(VAR_gtmSlaveDir)); if (WEXITSTATUS(rc) != 0) { elog(ERROR, "ERROR: could not promote gtm (host:%s, dir:%s)\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir)); return 1; } /* Configure promoted gtm */ if ((f = prepareLocalStdin(newFilename(stdIn), MAXPATH, NULL)) == NULL) return(1); fprintf(f, "#===================================================\n" "# Updated due to GTM failover\n" "# %s\n" "startup = ACT\n" "#----End of reconfiguration -------------------------\n", timeStampString(date, MAXTOKEN+1)); fclose(f); elog(NOTICE, "Updating gtm.conf at %s:%s\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir)); rc = doImmediate(sval(VAR_gtmSlaveServer), stdIn, "cat >> %s/gtm.conf", sval(VAR_gtmSlaveDir)); if (WEXITSTATUS(rc) != 0) { elog(ERROR, "ERROR: could not update gtm.conf (host: %s, dir:%s)\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir)); return 1; } /* Update and backup configuration file */ if ((f = prepareLocalStdin(stdIn, MAXPATH, NULL)) == NULL) return(1); fprintf(f, "#===================================================\n" "# pgxc configuration file updated due to GTM failover\n" "# %s\n" "gtmMasterServer=%s\n" "gtmMasterPort=%s\n" "gtmMasterDir=%s\n" "gtmSlave=n\n" "gtmSlaveServer=none\n" "gtmSlavePort=0\n" "gtmSlaveDir=none\n" "#----End of reconfiguration -------------------------\n", timeStampString(date, MAXTOKEN+1), sval(VAR_gtmSlaveServer), sval(VAR_gtmSlavePort), sval(VAR_gtmSlaveDir)); fclose(f); rc = doImmediate(NULL, stdIn, "cat >> %s", pgxc_ctl_config_path); if (WEXITSTATUS(rc) != 0) { elog(ERROR, "ERROR: could not update gtm.conf (host: %s, dir:%s)\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir)); return 1; } freeAndReset(stdIn); backup_configuration(); /* Reconfigure myself */ assign_val(VAR_gtmMasterServer, VAR_gtmSlaveServer); reset_var(VAR_gtmSlaveServer); assign_val(VAR_gtmMasterPort, VAR_gtmSlavePort); reset_var(VAR_gtmSlavePort); assign_val(VAR_gtmMasterDir, VAR_gtmSlaveDir); reset_var(VAR_gtmSlaveDir); assign_sval(VAR_gtmSlaveServer, "none"); assign_sval(VAR_gtmSlavePort, "0"); assign_sval(VAR_gtmSlaveDir, "none"); assign_sval(VAR_gtmSlave, "n"); return 0; }