dss支持主备切换
This commit is contained in:
@ -274,15 +274,6 @@ static int CBSwitchoverDemote(void *db_handle)
|
||||
SpinLockAcquire(&t_thrd.walsender_cxt.WalSndCtl->mutex);
|
||||
t_thrd.walsender_cxt.WalSndCtl->demotion = NoDemote;
|
||||
SpinLockRelease(&t_thrd.walsender_cxt.WalSndCtl->mutex);
|
||||
|
||||
if (dss_set_server_status_wrapper(false) != GS_SUCCESS) {
|
||||
ereport(PANIC,
|
||||
(errmodule(MOD_DMS),
|
||||
errmsg("[SS switchover] set dssserver standby failed, vgname: \"%s\", socketpath: \"%s\"",
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_vg_name,
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_conn_path),
|
||||
errhint("Check vgname and socketpath and restart later.")));
|
||||
}
|
||||
ereport(LOG,
|
||||
(errmodule(MOD_DMS), errmsg("[SS switchover] Success in %s primary demote, running as standby,"
|
||||
" waiting for reformer setting new role.", DemoteModeDesc(demote_mode))));
|
||||
@ -320,7 +311,7 @@ static int CBSwitchoverPromote(void *db_handle, unsigned char origPrimaryId)
|
||||
ereport(LOG, (errmodule(MOD_DMS), errmsg("[SS switchover] Starting to promote standby.")));
|
||||
|
||||
/* since original primary must have demoted, it is safe to allow promting standby write */
|
||||
if (dss_set_server_status_wrapper(true) != GS_SUCCESS) {
|
||||
if (dss_set_server_status_wrapper() != GS_SUCCESS) {
|
||||
ereport(PANIC, (errmodule(MOD_DMS), errmsg("Could not set dssserver flag, vgname: \"%s\", socketpath: \"%s\"",
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_vg_name,
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_conn_path),
|
||||
@ -1412,13 +1403,9 @@ static void CBReformStartNotify(void *db_handle, dms_role_t role, unsigned char
|
||||
ereport(LOG, (errmodule(MOD_DMS),
|
||||
errmsg("[SS reform] dms reform start, role:%d, reform type:%d", role, (int)ss_reform_type)));
|
||||
if (reform_info->dms_role == DMS_ROLE_REFORMER) {
|
||||
if (dss_set_server_status_wrapper(true) != GS_SUCCESS) {
|
||||
if (dss_set_server_status_wrapper() != GS_SUCCESS) {
|
||||
ereport(PANIC, (errmodule(MOD_DMS), errmsg("[SS reform] Could not set dssserver flag=read_write")));
|
||||
}
|
||||
} else {
|
||||
if (dss_set_server_status_wrapper(false) != GS_SUCCESS) {
|
||||
ereport(PANIC, (errmodule(MOD_DMS), errmsg("[SS reform] Could not set dssserver flag=read_only")));
|
||||
}
|
||||
}
|
||||
|
||||
/* cluster has no transactions during startup reform */
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
dms_commit_id=d5674265647286594922e5033142cfee9cbfdcfb
|
||||
dss_commit_id=5444f9b4715bd78c9c6b4757475e07ac6398ed6e
|
||||
dss_commit_id=5cbcec9ce4b88f85a83d229a118d31db6ed1fea2
|
||||
@ -2432,21 +2432,13 @@ int PostmasterMain(int argc, char* argv[])
|
||||
}
|
||||
|
||||
if (SS_PRIMARY_MODE) {
|
||||
if (dss_set_server_status_wrapper(true) != GS_SUCCESS) {
|
||||
if (dss_set_server_status_wrapper() != GS_SUCCESS) {
|
||||
ereport(FATAL, (errmsg("Could not set dssserver flag, vgname: \"%s\", socketpath: \"%s\"",
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_vg_name,
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_conn_path),
|
||||
errhint("Check vgname and socketpath and restart later.")));
|
||||
}
|
||||
ereport(LOG, (errmsg("set dss server status as primary")));
|
||||
} else if (SS_STANDBY_MODE) {
|
||||
if (dss_set_server_status_wrapper(false) != GS_SUCCESS) {
|
||||
ereport(FATAL, (errmsg("Could not set dssserver flag, vgname: \"%s\", socketpath: \"%s\"",
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_vg_name,
|
||||
g_instance.attr.attr_storage.dss_attr.ss_dss_conn_path),
|
||||
errhint("Check vgname and socketpath and restart later.")));
|
||||
}
|
||||
ereport(LOG, (errmsg("set dss server status as standby")));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -125,7 +125,7 @@ int dss_device_init(const char *conn_path, bool enable_dss)
|
||||
SS_RETURN_IFERR(dss_load_symbol(device_op.handle, "dss_lstat", (void **)&device_op.dss_lstat));
|
||||
SS_RETURN_IFERR(dss_load_symbol(device_op.handle, "dss_fstat", (void **)&device_op.dss_fstat));
|
||||
SS_RETURN_IFERR(
|
||||
dss_load_symbol(device_op.handle, "dss_set_server_status", (void **)&device_op.dss_set_server_status));
|
||||
dss_load_symbol(device_op.handle, "dss_set_main_inst", (void **)&device_op.dss_set_main_inst));
|
||||
SS_RETURN_IFERR(dss_load_symbol(device_op.handle, "dss_set_svr_path", (void **)&device_op.dss_set_svr_path));
|
||||
SS_RETURN_IFERR(
|
||||
dss_load_symbol(device_op.handle, "dss_register_log_callback", (void **)&device_op.dss_register_log_callback));
|
||||
|
||||
@ -689,13 +689,9 @@ int dss_pwrite_file_by_zero(int handle, off_t offset, off_t len)
|
||||
return GS_SUCCESS;
|
||||
}
|
||||
|
||||
int dss_set_server_status_wrapper(bool is_master)
|
||||
int dss_set_server_status_wrapper()
|
||||
{
|
||||
if (is_master) {
|
||||
return g_dss_device_op.dss_set_server_status(DSS_STATUS_READWRITE);
|
||||
} else {
|
||||
return g_dss_device_op.dss_set_server_status(DSS_STATUS_READONLY);
|
||||
}
|
||||
return g_dss_device_op.dss_set_main_inst();
|
||||
}
|
||||
|
||||
int dss_remove_dev(const char *name)
|
||||
|
||||
@ -62,7 +62,6 @@ typedef int (*dss_read_device_link)(const char *path, char *buf, int bufsize);
|
||||
typedef int (*dss_stat_device)(const char *path, dss_stat_info_t item);
|
||||
typedef int (*dss_lstat_device)(const char *path, dss_stat_info_t item);
|
||||
typedef int (*dss_fstat_device)(int handle, dss_stat_info_t item);
|
||||
typedef int (*dss_set_status)(dss_server_status_t status);
|
||||
typedef void (*dss_device_size)(const char *fname, long *fsize);
|
||||
typedef void (*dss_error_info)(int *errorcode, const char **errormsg);
|
||||
typedef void (*dss_svr_path)(const char *conn_path);
|
||||
@ -72,6 +71,7 @@ typedef int (*dss_aio_prep_pwrite_device)(void *iocb, int handle, void *buf, siz
|
||||
typedef int (*dss_aio_prep_pread_device)(void *iocb, int handle, void *buf, size_t count, long long offset);
|
||||
typedef int (*dss_init_logger_t)(char *log_home, unsigned int log_level, unsigned int log_backup_file_count, unsigned long long log_max_file_size);
|
||||
typedef void (*dss_refresh_logger_t)(char *log_field, unsigned long long *value);
|
||||
typedef int (*dss_set_main)(void);
|
||||
typedef struct st_dss_device_op_t {
|
||||
bool inited;
|
||||
void *handle;
|
||||
@ -105,7 +105,6 @@ typedef struct st_dss_device_op_t {
|
||||
dss_stat_device dss_stat;
|
||||
dss_lstat_device dss_lstat;
|
||||
dss_fstat_device dss_fstat;
|
||||
dss_set_status dss_set_server_status;
|
||||
dss_svr_path dss_set_svr_path;
|
||||
dss_log_callback dss_register_log_callback;
|
||||
dss_version dss_get_version;
|
||||
@ -113,6 +112,7 @@ typedef struct st_dss_device_op_t {
|
||||
dss_aio_prep_pread_device dss_aio_pread;
|
||||
dss_init_logger_t dss_init_logger;
|
||||
dss_refresh_logger_t dss_refresh_logger;
|
||||
dss_set_main dss_set_main_inst;
|
||||
} dss_device_op_t;
|
||||
|
||||
void dss_register_log_callback(dss_log_output cb_log_output);
|
||||
|
||||
@ -84,7 +84,7 @@ typedef void (*dss_log_output)(dss_log_id_t log_type, dss_log_level_t log_level,
|
||||
#define DSS_LOCAL_MINOR_VER_WEIGHT 1000
|
||||
#define DSS_LOCAL_MAJOR_VERSION 0
|
||||
#define DSS_LOCAL_MINOR_VERSION 0
|
||||
#define DSS_LOCAL_VERSION 2
|
||||
#define DSS_LOCAL_VERSION 3
|
||||
|
||||
#define DSS_SUCCESS 0
|
||||
#define DSS_ERROR (-1)
|
||||
|
||||
@ -76,7 +76,7 @@ int dss_stat_file(const char *path, struct stat *buf);
|
||||
int dss_lstat_file(const char *path, struct stat *buf);
|
||||
int dss_fstat_file(int handle, struct stat *buf);
|
||||
int dss_chmod_file(const char* path, mode_t mode);
|
||||
int dss_set_server_status_wrapper(bool is_master);
|
||||
int dss_set_server_status_wrapper();
|
||||
int dss_remove_dev(const char *name);
|
||||
|
||||
int dss_aio_prep_pwrite(void *iocb, int fd, void *buf, size_t count, long long offset);
|
||||
|
||||
Reference in New Issue
Block a user