dss支持主备切换

This commit is contained in:
chenchao
2023-01-31 11:08:57 +08:00
parent 6d4cfc8074
commit 4f3505328f
8 changed files with 11 additions and 36 deletions

View File

@ -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 */

View File

@ -1,2 +1,2 @@
dms_commit_id=d5674265647286594922e5033142cfee9cbfdcfb
dss_commit_id=5444f9b4715bd78c9c6b4757475e07ac6398ed6e
dss_commit_id=5cbcec9ce4b88f85a83d229a118d31db6ed1fea2

View File

@ -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")));
}
/*

View File

@ -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));

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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);