Beispiel #1
0
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;
}
Beispiel #2
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");
	}
}
Beispiel #3
0
/*
 * 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 */
}
Beispiel #4
0
static void setDefaultIfNeeded(char *name, char *val)
{
	if (!find_var(name) || !sval(name))
	{
		if (val)
			reset_var_val(name, val);
		else
			reset_var(name);
	}
}
Beispiel #5
0
/*
 * 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");
	}
}
Beispiel #6
0
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;
	}
	
	
}
Beispiel #7
0
void reset_var_val(char *name, char *val)
{
	reset_var(name);
	add_val(find_var(name), val);
}
Beispiel #8
0
/*
 * 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;
}
Beispiel #9
0
/*
 * 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;
}