option_gp.c 2.7 KB
Newer Older
1
#include "postgres_fe.h"
2
#include "pg_upgrade_greenplum.h"
3
#include "tablespace_gp_internal.h"
4
#include "greenplum_cluster_info_internal.h"
5

6 7 8 9 10 11 12 13 14 15 16
typedef enum
{
	DISPATCHER = 0,
	SEGMENT
} segmentMode;

typedef struct {
	bool progress;
	segmentMode segment_mode;
	checksumMode checksum_mode;
	char *old_tablespace_file_path;
B
wip  
Bhuvnesh Chaudhary 已提交
17
	bool timing;
18 19 20
} GreenplumUserOpts;

static GreenplumUserOpts greenplum_user_opts;
21 22 23 24 25

void
initialize_greenplum_user_options(void)
{
	greenplum_user_opts.segment_mode = SEGMENT;
26
	greenplum_user_opts.old_tablespace_file_path = NULL;
27 28 29

	old_cluster.greenplum_cluster_info = make_cluster_info();
	new_cluster.greenplum_cluster_info = make_cluster_info();
30 31 32
}

bool
33
process_greenplum_option(greenplumOption option, char *option_value)
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
{
	switch (option)
	{
		case GREENPLUM_MODE_OPTION:        /* --mode={dispatcher|segment} */
			if (pg_strcasecmp("dispatcher", optarg) == 0)
				greenplum_user_opts.segment_mode = DISPATCHER;
			else if (pg_strcasecmp("segment", optarg) == 0)
				greenplum_user_opts.segment_mode = SEGMENT;
			else
			{
				pg_log(PG_FATAL, "invalid segment configuration\n");
				exit(1);
			}
			break;

		case GREENPLUM_PROGRESS_OPTION:        /* --progress */
			greenplum_user_opts.progress = true;
			break;

		case GREENPLUM_ADD_CHECKSUM_OPTION:        /* --add-checksum */
			greenplum_user_opts.checksum_mode = CHECKSUM_ADD;
			break;

		case GREENPLUM_REMOVE_CHECKSUM_OPTION:        /* --remove-checksum */
			greenplum_user_opts.checksum_mode = CHECKSUM_REMOVE;
			break;

		case GREENPLUM_OLD_GP_DBID: /* --old-gp-dbid */
62
			set_gp_dbid(old_cluster.greenplum_cluster_info, atoi(optarg));
63 64 65
			break;

		case GREENPLUM_NEW_GP_DBID: /* --new-gp-dbid */
66
			set_gp_dbid(new_cluster.greenplum_cluster_info, atoi(optarg));
67 68 69 70 71 72
			break;

		case GREENPLUM_OLD_TABLESPACES_FILE: /* --old-tablespaces-file */
			greenplum_user_opts.old_tablespace_file_path = pg_strdup(optarg);
			break;

B
wip  
Bhuvnesh Chaudhary 已提交
73 74 75 76
		case GREENPLUM_TIMING:
			greenplum_user_opts.timing = true;
			break;

77 78 79 80 81 82 83
		default:
			return false;
	}

	return true;
}

84 85 86
void
validate_greenplum_options(void)
{
87 88

	if (!is_gp_dbid_set(old_cluster.greenplum_cluster_info))
89 90
		pg_fatal("--old-gp-dbid must be set\n");

91
	if (!is_gp_dbid_set(new_cluster.greenplum_cluster_info))
92 93 94 95 96 97 98 99 100
		pg_fatal("--new-gp-dbid must be set\n");

	if (greenplum_user_opts.old_tablespace_file_path) {
		populate_old_cluster_with_old_tablespaces(
			&old_cluster,
			greenplum_user_opts.old_tablespace_file_path);
	}
}

101 102 103 104
bool
is_greenplum_dispatcher_mode()
{
	return greenplum_user_opts.segment_mode == DISPATCHER;
105 106 107 108 109 110 111 112 113 114 115 116 117
}

bool
is_checksum_mode(checksumMode mode)
{
	return mode == greenplum_user_opts.checksum_mode;
}

bool
is_show_progress_mode(void)
{
	return greenplum_user_opts.progress;
}
B
wip  
Bhuvnesh Chaudhary 已提交
118 119 120 121 122 123

bool
is_timing_on(void)
{
	return greenplum_user_opts.timing;
}