add sf_configs.[hc]

connection_manager
YuQing 2020-09-10 20:30:08 +08:00
parent b60912bfd6
commit ae72705785
6 changed files with 138 additions and 8 deletions

View File

@ -5,12 +5,16 @@ INC_PATH = -I/usr/include -I/usr/local/include
LIB_PATH = $(LIBS) -lfastcommon
TARGET_LIB = $(TARGET_PREFIX)/$(LIB_VERSION)
ALL_HEADERS = sf_types.h sf_global.h sf_define.h sf_nio.h sf_service.h sf_func.h sf_util.h list.h
ALL_HEADERS = sf_types.h sf_global.h sf_define.h sf_nio.h sf_service.h \
sf_func.h sf_util.h sf_configs.h
ALL_LIBS = libserverframe.so
all: $(ALL_LIBS)
libserverframe.so: sf_nio.lo sf_service.lo sf_global.lo sf_func.lo sf_util.lo
libserverframe.so: sf_nio.lo sf_service.lo sf_global.lo sf_func.lo sf_util.lo \
sf_configs.lo
cc -shared -o $@ $^ $(LIB_PATH)
.lo:

80
src/sf_configs.c Normal file
View File

@ -0,0 +1,80 @@
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "fastcommon/shared_func.h"
#include "fastcommon/logger.h"
#include "sf_configs.h"
#define DEFAULT_RETRY_MAX_INTERVAL_MS 5000
#define DEFAULT_CONNECT_RETRY_TIMES 10
#define DEFAULT_CONNECT_RETRY_INTERVAL_MS 100
#define DEFAULT_NETWORK_RETRY_TIMES 10
#define DEFAULT_NETWORK_RETRY_INTERVAL_MS 100
int sf_load_net_retry_config(SFNetRetryConfig *net_retry_cfg,
IniFullContext *ini_ctx)
{
char *retry_interval_mode;
retry_interval_mode = iniGetStrValue(ini_ctx->section_name,
"retry_interval_mode", ini_ctx->context);
if (retry_interval_mode == NULL || *retry_interval_mode == '\0') {
net_retry_cfg->retry_interval_mode =
sf_net_retry_interval_mode_multiple;
} else if (strncasecmp(retry_interval_mode, "fixed", 5) == 0) {
net_retry_cfg->retry_interval_mode =
sf_net_retry_interval_mode_fixed;
} else if (strncasecmp(retry_interval_mode, "multi", 5) == 0) {
net_retry_cfg->retry_interval_mode =
sf_net_retry_interval_mode_multiple;
} else {
logWarning("file: "__FILE__", line: %d, "
"config file: %s, unkown retry_interval_mode: %s, "
"set to multiple", __LINE__, ini_ctx->filename,
retry_interval_mode);
net_retry_cfg->retry_interval_mode =
sf_net_retry_interval_mode_multiple;
}
net_retry_cfg->retry_max_interval_ms = iniGetIntValue(
ini_ctx->section_name, "retry_max_interval_ms",
ini_ctx->context, DEFAULT_RETRY_MAX_INTERVAL_MS);
net_retry_cfg->connect_retry_times = iniGetIntValue(
ini_ctx->section_name, "connect_retry_times",
ini_ctx->context, DEFAULT_CONNECT_RETRY_TIMES);
net_retry_cfg->connect_retry_interval_ms = iniGetIntValue(
ini_ctx->section_name, "connect_retry_interval_ms",
ini_ctx->context, DEFAULT_CONNECT_RETRY_INTERVAL_MS);
net_retry_cfg->network_retry_times = iniGetIntValue(
ini_ctx->section_name, "network_retry_times",
ini_ctx->context, DEFAULT_NETWORK_RETRY_TIMES);
net_retry_cfg->network_retry_interval_ms = iniGetIntValue(
ini_ctx->section_name, "network_retry_interval_ms",
ini_ctx->context, DEFAULT_NETWORK_RETRY_INTERVAL_MS);
return 0;
}
void sf_net_retry_config_to_string(SFNetRetryConfig *net_retry_cfg,
char *output, const int size)
{
snprintf(output, size, "retry_interval_mode=%s, "
"retry_max_interval_ms=%d ms, connect_retry_times=%d, "
"connect_retry_interval_ms=%d ms, network_retry_times=%d, "
"network_retry_interval_ms=%d ms",
(net_retry_cfg->retry_interval_mode ==
sf_net_retry_interval_mode_fixed ? "fixed" : "multipl"),
net_retry_cfg->retry_max_interval_ms,
net_retry_cfg->connect_retry_times,
net_retry_cfg->connect_retry_interval_ms,
net_retry_cfg->network_retry_times,
net_retry_cfg->network_retry_interval_ms);
}

40
src/sf_configs.h Normal file
View File

@ -0,0 +1,40 @@
//sf_global.h
#ifndef _SF_GLOBAL_H
#define _SF_GLOBAL_H
#include "fastcommon/common_define.h"
#include "fastcommon/ini_file_reader.h"
#include "sf_define.h"
#include "sf_types.h"
typedef enum sf_net_retry_interval_mode {
sf_net_retry_interval_mode_fixed,
sf_net_retry_interval_mode_multiple
} SFNetRetryIntervalMode;
typedef struct sf_net_retry_config {
SFNetRetryIntervalMode retry_interval_mode;
int retry_max_interval_ms;
int connect_retry_times;
int connect_retry_interval_ms;
int network_retry_times;
int network_retry_interval_ms;
} SFNetRetryConfig;
#ifdef __cplusplus
extern "C" {
#endif
int sf_load_net_retry_config(SFNetRetryConfig *net_retry_cfg,
IniFullContext *ini_ctx);
void sf_net_retry_config_to_string(SFNetRetryConfig *net_retry_cfg,
char *output, const int size);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -14,7 +14,6 @@
#include "fastcommon/common_define.h"
#include "fastcommon/shared_func.h"
#include "fastcommon/logger.h"
#include "sf_define.h"
#include "sf_nio.h"
#include "sf_global.h"

View File

@ -274,7 +274,8 @@ static int sf_nio_deal_task(struct fast_task_info *task)
return result;
}
int sf_nio_notify(struct fast_task_info *task, const int new_stage)
int sf_nio_notify_ex(struct fast_task_info *task, const int new_stage,
const char *file, const int line)
{
int64_t n;
int result;
@ -288,9 +289,10 @@ int sf_nio_notify(struct fast_task_info *task, const int new_stage)
{
if (SF_NIO_STAGE_IS_INPROGRESS(old_stage)) {
logWarning("file: "__FILE__", line: %d, "
"from caller {file: %s, line: %d}, "
"client ip: %s, nio stage in progress, "
"current stage: %d, skip set to %d", __LINE__,
task->client_ip, old_stage, new_stage);
file, line, task->client_ip, old_stage, new_stage);
return EBUSY;
}
}
@ -299,9 +301,10 @@ int sf_nio_notify(struct fast_task_info *task, const int new_stage)
old_stage, new_stage))
{
logWarning("file: "__FILE__", line: %d, "
"from caller {file: %s, line: %d}, "
"client ip: %s, skip set stage to %d because stage "
"changed, current stage: %d", __LINE__, task->client_ip,
new_stage, SF_NIO_TASK_STAGE_FETCH(task));
"changed, current stage: %d", __LINE__, file, line,
task->client_ip, new_stage, SF_NIO_TASK_STAGE_FETCH(task));
return EEXIST;
}

View File

@ -50,7 +50,11 @@ int sf_client_sock_read(int sock, short event, void *arg);
void sf_task_finish_clean_up(struct fast_task_info *task);
int sf_nio_notify(struct fast_task_info *task, const int new_stage);
int sf_nio_notify_ex(struct fast_task_info *task, const int new_stage,
const char *file, const int line);
#define sf_nio_notify(task, new_stage) \
sf_nio_notify_ex(task, new_stage, __FILE__, __LINE__)
int sf_set_read_event(struct fast_task_info *task);