[OPTIMIZE]reduce config memory usage
This commit is contained in:
323
src/maat_rule.c
323
src/maat_rule.c
@@ -32,25 +32,25 @@
|
||||
|
||||
#define MODULE_MAAT_RULE module_name_str("maat.rule")
|
||||
|
||||
struct maat_runtime* maat_runtime_create(long long version, struct maat *maat_instance)
|
||||
struct maat_runtime* maat_runtime_create(long long version, struct maat *maat_inst)
|
||||
{
|
||||
struct maat_runtime *maat_rt = ALLOC(struct maat_runtime, 1);
|
||||
|
||||
maat_rt->version = version;
|
||||
int ret = table_manager_runtime_create(maat_instance->tbl_mgr,
|
||||
maat_instance->opts.nr_worker_thread,
|
||||
maat_instance->garbage_bin);
|
||||
int ret = table_manager_runtime_create(maat_inst->tbl_mgr,
|
||||
maat_inst->opts.nr_worker_thread,
|
||||
maat_inst->garbage_bin);
|
||||
if (ret < 0) {
|
||||
FREE(maat_rt);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
maat_rt->ref_tbl_mgr = maat_instance->tbl_mgr;
|
||||
maat_rt->max_table_num = table_manager_table_size(maat_instance->tbl_mgr);
|
||||
maat_rt->ref_tbl_mgr = maat_inst->tbl_mgr;
|
||||
maat_rt->max_table_num = table_manager_table_size(maat_inst->tbl_mgr);
|
||||
maat_rt->sequence_map = maat_kv_store_new();
|
||||
maat_rt->logger = maat_instance->logger;
|
||||
maat_rt->ref_garbage_bin = maat_instance->garbage_bin;
|
||||
maat_rt->ref_cnt = alignment_int64_array_alloc(maat_instance->opts.nr_worker_thread);
|
||||
maat_rt->logger = maat_inst->logger;
|
||||
maat_rt->ref_garbage_bin = maat_inst->garbage_bin;
|
||||
maat_rt->ref_cnt = alignment_int64_array_alloc(maat_inst->opts.nr_worker_thread);
|
||||
|
||||
return maat_rt;
|
||||
}
|
||||
@@ -67,30 +67,32 @@ void maat_runtime_commit(struct maat_runtime *maat_rt, int update_type,
|
||||
|
||||
void maat_start_cb(long long new_version, int update_type, void *u_param)
|
||||
{
|
||||
struct maat *maat_instance = (struct maat *)u_param;
|
||||
maat_instance->new_version = new_version;
|
||||
size_t i = 0;
|
||||
size_t max_table_cnt = table_manager_table_size(maat_instance->tbl_mgr);
|
||||
enum table_type table_type = TABLE_TYPE_INVALID;
|
||||
struct maat *maat_inst = (struct maat *)u_param;
|
||||
|
||||
size_t max_table_cnt = table_manager_table_size(maat_inst->tbl_mgr);
|
||||
maat_inst->new_version = new_version;
|
||||
|
||||
if (update_type == MAAT_UPDATE_TYPE_FULL) {
|
||||
maat_instance->creating_maat_rt = maat_runtime_create(new_version, maat_instance);
|
||||
maat_inst->creating_maat_rt = maat_runtime_create(new_version, maat_inst);
|
||||
|
||||
for (i = 0; i < max_table_cnt; i++) {
|
||||
table_type = table_manager_get_table_type(maat_instance->tbl_mgr, i);
|
||||
table_type = table_manager_get_table_type(maat_inst->tbl_mgr, i);
|
||||
if (table_type == TABLE_TYPE_COMPILE) {
|
||||
// compile runtime need a reference to maat runtime
|
||||
void *compile_rt = table_manager_get_updating_runtime(maat_instance->tbl_mgr, i);
|
||||
compile_runtime_init(compile_rt, maat_instance->creating_maat_rt, NULL);
|
||||
void *compile_rt = table_manager_get_updating_runtime(maat_inst->tbl_mgr, i);
|
||||
compile_runtime_init(compile_rt, maat_inst->creating_maat_rt);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
maat_instance->maat_version = new_version;
|
||||
maat_inst->maat_version = new_version;
|
||||
}
|
||||
|
||||
for (i = 0; i < max_table_cnt; i++) {
|
||||
table_type = table_manager_get_table_type(maat_instance->tbl_mgr, i);
|
||||
table_type = table_manager_get_table_type(maat_inst->tbl_mgr, i);
|
||||
if (table_type == TABLE_TYPE_PLUGIN) {
|
||||
void *schema = table_manager_get_schema(maat_instance->tbl_mgr, i);
|
||||
void *schema = table_manager_get_schema(maat_inst->tbl_mgr, i);
|
||||
plugin_table_all_callback_start((struct plugin_schema *)schema, update_type);
|
||||
}
|
||||
}
|
||||
@@ -102,30 +104,30 @@ int maat_update_cb(const char *table_name, const char *line, void *u_param)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct maat *maat_instance =(struct maat *)u_param;
|
||||
struct maat *maat_inst =(struct maat *)u_param;
|
||||
struct maat_runtime* maat_rt = NULL;
|
||||
int table_id = table_manager_get_table_id(maat_instance->tbl_mgr, table_name);
|
||||
int table_id = table_manager_get_table_id(maat_inst->tbl_mgr, table_name);
|
||||
if (table_id < 0) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] update warning, unknown table name %s",
|
||||
__FUNCTION__, __LINE__, table_name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void *schema = table_manager_get_schema(maat_instance->tbl_mgr, table_id);
|
||||
void *schema = table_manager_get_schema(maat_inst->tbl_mgr, table_id);
|
||||
if (NULL == schema) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] update warning, table name %s doesn't have table schema",
|
||||
__FUNCTION__, __LINE__, table_name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int update_type = MAAT_UPDATE_TYPE_INC;
|
||||
if (maat_instance->creating_maat_rt != NULL) { //Full update
|
||||
maat_rt = maat_instance->creating_maat_rt;
|
||||
if (maat_inst->creating_maat_rt != NULL) { //Full update
|
||||
maat_rt = maat_inst->creating_maat_rt;
|
||||
update_type = MAAT_UPDATE_TYPE_FULL;
|
||||
} else {
|
||||
maat_rt = maat_instance->maat_rt;
|
||||
maat_rt = maat_inst->maat_rt;
|
||||
}
|
||||
|
||||
table_manager_update_runtime(maat_rt->ref_tbl_mgr, table_name, table_id, line, update_type);
|
||||
@@ -166,107 +168,107 @@ void maat_plugin_table_all_callback_finish(struct table_manager *tbl_mgr)
|
||||
|
||||
void maat_finish_cb(void *u_param)
|
||||
{
|
||||
struct maat *maat_instance = (struct maat *)u_param;
|
||||
struct maat *maat_inst = (struct maat *)u_param;
|
||||
|
||||
maat_plugin_table_all_callback_finish(maat_instance->tbl_mgr);
|
||||
maat_plugin_table_all_callback_finish(maat_inst->tbl_mgr);
|
||||
|
||||
if (maat_instance->creating_maat_rt != NULL) {
|
||||
maat_runtime_commit(maat_instance->creating_maat_rt, MAAT_UPDATE_TYPE_FULL,
|
||||
maat_instance->creating_maat_rt->version, maat_instance->logger);
|
||||
maat_instance->creating_maat_rt->rule_num = maat_runtime_rule_num(maat_instance->creating_maat_rt);
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
if (maat_inst->creating_maat_rt != NULL) {
|
||||
maat_runtime_commit(maat_inst->creating_maat_rt, MAAT_UPDATE_TYPE_FULL,
|
||||
maat_inst->creating_maat_rt->version, maat_inst->logger);
|
||||
maat_inst->creating_maat_rt->rule_num = maat_runtime_rule_num(maat_inst->creating_maat_rt);
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Full config version %llu load %d entries complete",
|
||||
maat_instance->creating_maat_rt->version,
|
||||
maat_instance->creating_maat_rt->rule_num);
|
||||
} else if (maat_instance->maat_rt != NULL) {
|
||||
maat_instance->maat_rt->version = maat_instance->maat_version;
|
||||
maat_runtime_commit(maat_instance->maat_rt, MAAT_UPDATE_TYPE_INC,
|
||||
maat_instance->maat_rt->version, maat_instance->logger);
|
||||
maat_instance->maat_rt->rule_num = maat_runtime_rule_num(maat_instance->maat_rt);
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
maat_inst->creating_maat_rt->version,
|
||||
maat_inst->creating_maat_rt->rule_num);
|
||||
} else if (maat_inst->maat_rt != NULL) {
|
||||
maat_inst->maat_rt->version = maat_inst->maat_version;
|
||||
maat_runtime_commit(maat_inst->maat_rt, MAAT_UPDATE_TYPE_INC,
|
||||
maat_inst->maat_rt->version, maat_inst->logger);
|
||||
maat_inst->maat_rt->rule_num = maat_runtime_rule_num(maat_inst->maat_rt);
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Inc config version %llu load %d entries complete",
|
||||
maat_instance->maat_rt->version,
|
||||
maat_instance->maat_rt->rule_num);
|
||||
maat_inst->maat_rt->version,
|
||||
maat_inst->maat_rt->rule_num);
|
||||
} else {
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Version %d has no valid rules, plugin callback complete.",
|
||||
maat_instance->maat_version);
|
||||
maat_inst->maat_version);
|
||||
}
|
||||
|
||||
maat_instance->new_version = INVALID_VERSION;
|
||||
maat_inst->new_version = INVALID_VERSION;
|
||||
}
|
||||
|
||||
void maat_read_full_config(struct maat *maat_instance)
|
||||
void maat_read_full_config(struct maat *maat_inst)
|
||||
{
|
||||
int ret = -1;
|
||||
char err_str[NAME_MAX] = {0};
|
||||
struct source_redis_ctx *redis_ctx = NULL;
|
||||
|
||||
switch (maat_instance->opts.input_mode) {
|
||||
switch (maat_inst->opts.input_mode) {
|
||||
case DATA_SOURCE_REDIS:
|
||||
redis_ctx = &(maat_instance->opts.redis_ctx);
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
redis_ctx = &(maat_inst->opts.redis_ctx);
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Maat initiate from Redis %s:%hu db%d",
|
||||
redis_ctx->redis_ip, redis_ctx->redis_port, redis_ctx->redis_db);
|
||||
redis_ctx->read_ctx = maat_cmd_connect_redis(redis_ctx->redis_ip,
|
||||
redis_ctx->redis_port,
|
||||
redis_ctx->redis_db,
|
||||
maat_instance->logger);
|
||||
maat_inst->logger);
|
||||
if (redis_ctx->read_ctx != NULL) {
|
||||
redis_monitor_traverse(maat_instance->maat_version, redis_ctx,
|
||||
redis_monitor_traverse(maat_inst->maat_version, redis_ctx,
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_instance);
|
||||
maat_inst);
|
||||
}
|
||||
|
||||
if (NULL == maat_instance->creating_maat_rt) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
if (NULL == maat_inst->creating_maat_rt) {
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] At initiation: NO effective rule in redis %s:%hu db%d",
|
||||
__FUNCTION__, __LINE__, redis_ctx->redis_ip, redis_ctx->redis_port,
|
||||
redis_ctx->redis_db);
|
||||
}
|
||||
break;
|
||||
case DATA_SOURCE_IRIS_FILE:
|
||||
config_monitor_traverse(maat_instance->maat_version,
|
||||
maat_instance->opts.iris_ctx.full_idx_dir,
|
||||
config_monitor_traverse(maat_inst->maat_version,
|
||||
maat_inst->opts.iris_ctx.full_idx_dir,
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_instance, maat_instance->opts.decrypt_key,
|
||||
maat_instance->logger);
|
||||
if (NULL == maat_instance->creating_maat_rt) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
maat_inst, maat_inst->opts.decrypt_key,
|
||||
maat_inst->logger);
|
||||
if (NULL == maat_inst->creating_maat_rt) {
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] At initiation: NO effective rule in %s",
|
||||
__FUNCTION__, __LINE__, maat_instance->opts.iris_ctx.full_idx_dir);
|
||||
__FUNCTION__, __LINE__, maat_inst->opts.iris_ctx.full_idx_dir);
|
||||
}
|
||||
break;
|
||||
case DATA_SOURCE_JSON_FILE:
|
||||
ret = load_maat_json_file(maat_instance, maat_instance->opts.json_ctx.json_file,
|
||||
ret = load_maat_json_file(maat_inst, maat_inst->opts.json_ctx.json_file,
|
||||
err_str, sizeof(err_str));
|
||||
if (ret < 0) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] Maat re-initiate with JSON file %s failed: %s",
|
||||
__FUNCTION__, __LINE__, maat_instance->opts.json_ctx.json_file, err_str);
|
||||
__FUNCTION__, __LINE__, maat_inst->opts.json_ctx.json_file, err_str);
|
||||
}
|
||||
|
||||
config_monitor_traverse(maat_instance->maat_version,
|
||||
maat_instance->opts.json_ctx.iris_file,
|
||||
config_monitor_traverse(maat_inst->maat_version,
|
||||
maat_inst->opts.json_ctx.iris_file,
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_instance, maat_instance->opts.decrypt_key,
|
||||
maat_instance->logger);
|
||||
if (NULL == maat_instance->creating_maat_rt) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
maat_inst, maat_inst->opts.decrypt_key,
|
||||
maat_inst->logger);
|
||||
if (NULL == maat_inst->creating_maat_rt) {
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] At initiation: NO effective rule in %s",
|
||||
__FUNCTION__, __LINE__, maat_instance->opts.json_ctx.iris_file);
|
||||
__FUNCTION__, __LINE__, maat_inst->opts.json_ctx.iris_file);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
maat_instance->maat_rt = maat_instance->creating_maat_rt;
|
||||
maat_instance->creating_maat_rt = NULL;
|
||||
maat_instance->is_running = 1;
|
||||
if (maat_instance->maat_rt != NULL) {
|
||||
maat_instance->maat_version = maat_instance->maat_rt->version;
|
||||
maat_instance->last_full_version = maat_instance->maat_rt->version;
|
||||
maat_inst->maat_rt = maat_inst->creating_maat_rt;
|
||||
maat_inst->creating_maat_rt = NULL;
|
||||
maat_inst->is_running = 1;
|
||||
if (maat_inst->maat_rt != NULL) {
|
||||
maat_inst->maat_version = maat_inst->maat_rt->version;
|
||||
maat_inst->last_full_version = maat_inst->maat_rt->version;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -326,74 +328,77 @@ void *rule_monitor_loop(void *arg)
|
||||
{
|
||||
/* Defined by prctl: The name can be up to 16 bytes long, and should
|
||||
be null terminated if it contains fewer bytes. */
|
||||
char maat_name[16] = {0};
|
||||
struct maat *maat_instance = (struct maat *)arg;
|
||||
char maat_name[MAX_INSTANCE_NAME_LEN + 1] = {0};
|
||||
struct maat *maat_inst = (struct maat *)arg;
|
||||
|
||||
if (strlen(maat_instance->opts.instance_name) > 0) {
|
||||
snprintf(maat_name, sizeof(maat_name), "MAAT_%s", maat_instance->opts.instance_name);
|
||||
if (strlen(maat_inst->opts.inst_name) > 0) {
|
||||
snprintf(maat_name, sizeof(maat_name), "%s", maat_inst->opts.inst_name);
|
||||
} else {
|
||||
snprintf(maat_name, sizeof(maat_name), "MAAT");
|
||||
snprintf(maat_name, sizeof(maat_name), "MAAT_LOOP");
|
||||
}
|
||||
|
||||
int ret = prctl(PR_SET_NAME, (unsigned long long)maat_name, NULL, NULL, NULL);
|
||||
assert(ret >= 0);
|
||||
|
||||
pthread_mutex_lock(&(maat_instance->background_update_mutex));
|
||||
pthread_mutex_lock(&(maat_inst->background_update_mutex));
|
||||
/* if deferred load on */
|
||||
if (maat_instance->opts.deferred_load_on != 0) {
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
if (maat_inst->opts.deferred_load_on != 0) {
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Deferred Loading ON, updating in %s:%d", __FUNCTION__, __LINE__);
|
||||
maat_read_full_config(maat_instance);
|
||||
maat_read_full_config(maat_inst);
|
||||
}
|
||||
pthread_mutex_unlock(&(maat_instance->background_update_mutex));
|
||||
pthread_mutex_unlock(&(maat_inst->background_update_mutex));
|
||||
|
||||
char md5_tmp[MD5_DIGEST_LENGTH * 2 + 1] = {0};
|
||||
char err_str[NAME_MAX] = {0};
|
||||
struct stat attrib;
|
||||
while (maat_instance->is_running) {
|
||||
|
||||
while (maat_inst->is_running) {
|
||||
if (time(NULL) % 10 == 0) {
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"%s thread still alive.........", __FUNCTION__);
|
||||
}
|
||||
|
||||
usleep(maat_instance->opts.rule_update_checking_interval_ms * 1000);
|
||||
if (0 == pthread_mutex_trylock(&(maat_instance->background_update_mutex))) {
|
||||
switch (maat_instance->opts.input_mode) {
|
||||
usleep(maat_inst->opts.rule_update_checking_interval_ms * 1000);
|
||||
|
||||
if (0 == pthread_mutex_trylock(&(maat_inst->background_update_mutex))) {
|
||||
switch (maat_inst->opts.input_mode) {
|
||||
case DATA_SOURCE_REDIS:
|
||||
redis_monitor_traverse(maat_instance->maat_version,
|
||||
&(maat_instance->opts.redis_ctx),
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_instance);
|
||||
redis_monitor_traverse(maat_inst->maat_version,
|
||||
&(maat_inst->opts.redis_ctx),
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_inst);
|
||||
break;
|
||||
case DATA_SOURCE_IRIS_FILE:
|
||||
config_monitor_traverse(maat_instance->maat_version,
|
||||
maat_instance->opts.iris_ctx.inc_idx_dir,
|
||||
config_monitor_traverse(maat_inst->maat_version,
|
||||
maat_inst->opts.iris_ctx.inc_idx_dir,
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_instance, maat_instance->opts.decrypt_key,
|
||||
maat_instance->logger);
|
||||
maat_inst, maat_inst->opts.decrypt_key,
|
||||
maat_inst->logger);
|
||||
break;
|
||||
case DATA_SOURCE_JSON_FILE:
|
||||
memset(md5_tmp, 0, sizeof(md5_tmp));
|
||||
stat(maat_instance->opts.json_ctx.json_file, &attrib);
|
||||
if (memcmp(&attrib.st_ctim, &(maat_instance->opts.json_ctx.last_md5_time), sizeof(attrib.st_ctim))) {
|
||||
maat_instance->opts.json_ctx.last_md5_time = attrib.st_ctim;
|
||||
md5_file(maat_instance->opts.json_ctx.json_file, md5_tmp);
|
||||
if (0 != strcmp(md5_tmp, maat_instance->opts.json_ctx.effective_json_md5)) {
|
||||
ret = load_maat_json_file(maat_instance, maat_instance->opts.json_ctx.json_file,
|
||||
stat(maat_inst->opts.json_ctx.json_file, &attrib);
|
||||
if (memcmp(&attrib.st_ctim, &(maat_inst->opts.json_ctx.last_md5_time),
|
||||
sizeof(attrib.st_ctim))) {
|
||||
maat_inst->opts.json_ctx.last_md5_time = attrib.st_ctim;
|
||||
md5_file(maat_inst->opts.json_ctx.json_file, md5_tmp);
|
||||
if (0 != strcmp(md5_tmp, maat_inst->opts.json_ctx.effective_json_md5)) {
|
||||
ret = load_maat_json_file(maat_inst, maat_inst->opts.json_ctx.json_file,
|
||||
err_str, sizeof(err_str));
|
||||
if (ret < 0) {
|
||||
log_error(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_error(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"[%s:%d] Maat re-initiate with JSON file %s (md5=%s)failed: %s\n",
|
||||
__FUNCTION__, __LINE__, maat_instance->opts.json_ctx.json_file,
|
||||
__FUNCTION__, __LINE__, maat_inst->opts.json_ctx.json_file,
|
||||
md5_tmp, err_str);
|
||||
} else {
|
||||
config_monitor_traverse(0, maat_instance->opts.json_ctx.iris_file,
|
||||
config_monitor_traverse(0, maat_inst->opts.json_ctx.iris_file,
|
||||
maat_start_cb, maat_update_cb, maat_finish_cb,
|
||||
maat_instance, maat_instance->opts.decrypt_key,
|
||||
maat_instance->logger);
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
maat_inst, maat_inst->opts.decrypt_key,
|
||||
maat_inst->logger);
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Maat re-initiate with JSON file %s success, md5: %s\n",
|
||||
maat_instance->opts.json_ctx.json_file, md5_tmp);
|
||||
maat_inst->opts.json_ctx.json_file, md5_tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -402,77 +407,81 @@ void *rule_monitor_loop(void *arg)
|
||||
break;
|
||||
}
|
||||
|
||||
if (maat_instance->creating_maat_rt != NULL) {
|
||||
struct maat_runtime *old_maat_rt = maat_instance->maat_rt;
|
||||
maat_instance->maat_rt = maat_instance->creating_maat_rt;
|
||||
if (maat_inst->creating_maat_rt != NULL) {
|
||||
struct maat_runtime *old_maat_rt = maat_inst->maat_rt;
|
||||
maat_inst->maat_rt = maat_inst->creating_maat_rt;
|
||||
|
||||
if (old_maat_rt != NULL) {
|
||||
if (maat_instance->maat_rt->version > old_maat_rt->version) {
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
if (maat_inst->maat_rt->version > old_maat_rt->version) {
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Maat version updated %lld -> %lld\n",
|
||||
old_maat_rt->version, maat_instance->maat_rt->version);
|
||||
old_maat_rt->version, maat_inst->maat_rt->version);
|
||||
} else {
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Maat version roll back %lld -> %lld\n",
|
||||
old_maat_rt->version, maat_instance->maat_rt->version);
|
||||
old_maat_rt->version, maat_inst->maat_rt->version);
|
||||
}
|
||||
maat_garbage_bagging(maat_instance->garbage_bin, old_maat_rt, NULL,
|
||||
|
||||
maat_inst->stat->zombie_rs_stream += alignment_int64_array_sum(old_maat_rt->ref_cnt,
|
||||
maat_inst->opts.nr_worker_thread);
|
||||
maat_garbage_bagging(maat_inst->garbage_bin, old_maat_rt, NULL,
|
||||
garbage_maat_runtime_destroy);
|
||||
}
|
||||
|
||||
maat_instance->creating_maat_rt = NULL;
|
||||
maat_instance->maat_version = maat_instance->maat_rt->version;
|
||||
maat_instance->last_full_version = maat_instance->maat_rt->version;
|
||||
maat_inst->creating_maat_rt = NULL;
|
||||
maat_inst->maat_version = maat_inst->maat_rt->version;
|
||||
maat_inst->last_full_version = maat_inst->maat_rt->version;
|
||||
}
|
||||
|
||||
if (maat_instance->maat_rt != NULL) {
|
||||
time_t time_window = time(NULL) - maat_instance->maat_rt->last_update_time;
|
||||
if (maat_inst->maat_rt != NULL) {
|
||||
time_t time_window = time(NULL) - maat_inst->maat_rt->last_update_time;
|
||||
|
||||
if (time_window >= maat_instance->opts.rule_effect_interval_ms / 1000) {
|
||||
maat_runtime_commit(maat_instance->maat_rt, MAAT_UPDATE_TYPE_INC,
|
||||
maat_instance->maat_rt->version, maat_instance->logger);
|
||||
log_info(maat_instance->logger, MODULE_MAAT_RULE,
|
||||
if (time_window >= maat_inst->opts.rule_effect_interval_ms / 1000) {
|
||||
maat_runtime_commit(maat_inst->maat_rt, MAAT_UPDATE_TYPE_INC,
|
||||
maat_inst->maat_rt->version, maat_inst->logger);
|
||||
log_info(maat_inst->logger, MODULE_MAAT_RULE,
|
||||
"Actual update config version %u, %d entries load to maat runtime.",
|
||||
maat_instance->maat_rt->version, maat_instance->maat_rt->rule_num);
|
||||
maat_inst->maat_rt->version, maat_inst->maat_rt->rule_num);
|
||||
}
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&(maat_instance->background_update_mutex));
|
||||
pthread_mutex_unlock(&(maat_inst->background_update_mutex));
|
||||
}
|
||||
maat_garbage_collect_routine(maat_instance->garbage_bin);
|
||||
if ((1 == maat_instance->opts.stat_on) && (time(NULL) % 2 == 0)) {
|
||||
maat_stat_output(maat_instance->stat, maat_instance->maat_version, maat_instance->opts.perf_on);
|
||||
|
||||
maat_garbage_collect_routine(maat_inst->garbage_bin);
|
||||
if ((1 == maat_inst->opts.stat_on) && (time(NULL) % 2 == 0)) {
|
||||
maat_stat_output(maat_inst->stat, maat_inst->maat_version, maat_inst->opts.perf_on);
|
||||
}
|
||||
}
|
||||
|
||||
maat_runtime_destroy(maat_instance->maat_rt);
|
||||
maat_garbage_bin_free(maat_instance->garbage_bin);
|
||||
table_manager_destroy(maat_instance->tbl_mgr); //table manager MUST be freed at last.
|
||||
maat_runtime_destroy(maat_inst->maat_rt);
|
||||
maat_garbage_bin_free(maat_inst->garbage_bin);
|
||||
table_manager_destroy(maat_inst->tbl_mgr); //table manager MUST be freed at last.
|
||||
|
||||
if (maat_instance->stat != NULL) {
|
||||
maat_stat_free(maat_instance->stat);
|
||||
maat_instance->stat = NULL;
|
||||
if (maat_inst->stat != NULL) {
|
||||
maat_stat_free(maat_inst->stat);
|
||||
maat_inst->stat = NULL;
|
||||
}
|
||||
|
||||
if (maat_instance->opts.input_mode == DATA_SOURCE_REDIS) {
|
||||
if (maat_instance->opts.redis_ctx.read_ctx != NULL) {
|
||||
redisFree(maat_instance->opts.redis_ctx.read_ctx);
|
||||
maat_instance->opts.redis_ctx.read_ctx = NULL;
|
||||
if (maat_inst->opts.input_mode == DATA_SOURCE_REDIS) {
|
||||
if (maat_inst->opts.redis_ctx.read_ctx != NULL) {
|
||||
redisFree(maat_inst->opts.redis_ctx.read_ctx);
|
||||
maat_inst->opts.redis_ctx.read_ctx = NULL;
|
||||
}
|
||||
|
||||
if (maat_instance->opts.redis_ctx.write_ctx != NULL) {
|
||||
redisFree(maat_instance->opts.redis_ctx.write_ctx);
|
||||
maat_instance->opts.redis_ctx.write_ctx = NULL;
|
||||
if (maat_inst->opts.redis_ctx.write_ctx != NULL) {
|
||||
redisFree(maat_inst->opts.redis_ctx.write_ctx);
|
||||
maat_inst->opts.redis_ctx.write_ctx = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (maat_instance->opts.accept_tags != NULL) {
|
||||
FREE(maat_instance->opts.accept_tags);
|
||||
maat_instance->opts.accept_tags = NULL;
|
||||
if (maat_inst->opts.accept_tags != NULL) {
|
||||
FREE(maat_inst->opts.accept_tags);
|
||||
maat_inst->opts.accept_tags = NULL;
|
||||
}
|
||||
|
||||
log_handle_destroy(maat_instance->logger);
|
||||
FREE(maat_instance);
|
||||
log_handle_destroy(maat_inst->logger);
|
||||
FREE(maat_inst);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user