option_gp.c 2.6 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 17 18 19
typedef enum
{
	DISPATCHER = 0,
	SEGMENT
} segmentMode;

typedef struct {
	bool progress;
	segmentMode segment_mode;
	checksumMode checksum_mode;
	char *old_tablespace_file_path;
} GreenplumUserOpts;

static GreenplumUserOpts greenplum_user_opts;
20 21 22 23 24

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

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

bool
32
process_greenplum_option(greenplumOption option)
33 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
{
	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 */
61
			set_gp_dbid(old_cluster.greenplum_cluster_info, atoi(optarg));
62 63 64
			break;

		case GREENPLUM_NEW_GP_DBID: /* --new-gp-dbid */
65
			set_gp_dbid(new_cluster.greenplum_cluster_info, atoi(optarg));
66 67 68 69 70 71 72 73 74 75 76 77 78
			break;

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

		default:
			return false;
	}

	return true;
}

79 80 81
void
validate_greenplum_options(void)
{
82 83

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

86
	if (!is_gp_dbid_set(new_cluster.greenplum_cluster_info))
87 88 89 90 91 92 93 94 95
		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);
	}
}

96 97 98 99
bool
is_greenplum_dispatcher_mode()
{
	return greenplum_user_opts.segment_mode == DISPATCHER;
100 101 102 103 104 105 106 107 108 109 110 111 112
}

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

bool
is_show_progress_mode(void)
{
	return greenplum_user_opts.progress;
}