Exemplo n.º 1
0
int
main(int argc, char *argv[])
{
	PGconn			*conn;
	StringInfoData	 conn_info;
	int				 num_options;

	num_options = pgut_getopt(argc, argv, options);

	/* command-line arguments is not necessary */
	if (num_options != argc)
		ereport(ERROR,
			(errcode(EINVAL),
			 errmsg("too many argumetns")));

	/* can't specified the mode two or more */
	if ((mode_list && (mode_size || mode_report || mode_snapshot || mode_delete)) ||
		(mode_size && (mode_report || mode_snapshot || mode_delete)) ||
		(mode_report && (mode_snapshot || mode_delete)) ||
		(mode_snapshot && mode_delete))
		ereport(ERROR,
			(errcode(EINVAL),
			 errmsg("can't specify two or more mode")));

	/* connect to database */
	initStringInfo(&conn_info);
	if (dbname && dbname[0])
		appendStringInfo(&conn_info, "dbname=%s ", dbname);
	if (host && host[0])
		appendStringInfo(&conn_info, "host=%s ", host);
	if (port && port[0])
		appendStringInfo(&conn_info, "port=%s ", port);
	if (username && username[0])
		appendStringInfo(&conn_info, "user=%s ", username);

	conn = pgut_connect(conn_info.data, prompt_password, ERROR);
	termStringInfo(&conn_info);

	/* execute a specified operation */
	if (mode_list)
		do_list(conn, instid);
	else if (mode_size)
		do_size(conn);
	else if (mode_report)
		do_report(conn, mode_report,
			instid, beginid, endid, begindate, enddate, output);
	else if (mode_snapshot)
		do_snapshot(conn, mode_snapshot);
	else if (mode_delete)
		do_delete(conn, mode_delete);
	else
		ereport(ERROR,
			(errcode(EINVAL),
			 errmsg("please specify operation option (-l, -s, -r, -S, -D)")));

	pgut_disconnect(conn);
	return 0;
}
Exemplo n.º 2
0
/*
 * writer_main
 */
void *
writer_main(void *arg)
{
	int		items;

	reload_params();
	set_connect_privileges();

	while (shutdown_state < COLLECTOR_SHUTDOWN)
	{
		/* update settings if reloaded */
		if (writer_reload_time < collector_reload_time)
		{
			writer_reload_time = collector_reload_time;
			pthread_mutex_lock(&reload_lock);
			reload_params();
			pthread_mutex_unlock(&reload_lock);
		}

		/* send queued items into the repository server */
		if (recv_writer_queue() == 0)
		{
			/* disconnect if there are no works for a long time */
			if (writer_conn != NULL &&
				writer_conn_last_used + WRITER_CONN_KEEP_SECS < time(NULL))
			{
				pgut_disconnect(writer_conn);
				writer_conn = NULL;
				elog(DEBUG2, "disconnect unused writer connection");
			}
		}

		usleep(200 * 1000);	/* 200ms */
	}

	/* flush remaining items */
	if ((items = recv_writer_queue()) > 0)
		elog(WARNING, "writer discards %d items", items);

	pgut_disconnect(writer_conn);
	writer_conn = NULL;
	shutdown_progress(WRITER_SHUTDOWN);

	return NULL;
}
Exemplo n.º 3
0
void
disconnect(void)
{
	if (connection)
	{
		pgut_disconnect(connection);
		connection = NULL;
	}
}
Exemplo n.º 4
0
/*
 * load guc variables
 */
static void
reload_params(void)
{
	pgut_disconnect(writer_conn);
	writer_conn = NULL;

	if (my_repository_server != NULL &&
		strcmp(my_repository_server, repository_server) != 0)
	{
		free(my_repository_server);
		my_repository_server = pgut_strdup(repository_server);
		set_connect_privileges();
	}

	free(my_repository_server);
	my_repository_server = pgut_strdup(repository_server);
}