修改hash表超时淘汰释放函数

This commit is contained in:
崔一鸣
2018-09-28 14:55:36 +08:00
parent 26e9e4b242
commit 5bf18848c1
2 changed files with 41 additions and 17 deletions

View File

@@ -438,29 +438,42 @@ static void certstore_rpc_on_fail(enum e_future_error err, const char * what, vo
/*
* Certificate, including private key and keyring chain.
*/
static int __wrapper_MESA_htable_set_opt(MESA_htable_handle table, enum MESA_htable_opt opt_type, unsigned int value)
static int __wrapper_MESA_htable_set_opt_int(MESA_htable_handle table, enum MESA_htable_opt opt_type, unsigned int value)
{
int ret = MESA_htable_set_opt(table, opt_type, &value, (int)(sizeof(value)));
assert(ret == 0);
return ret;
}
static int __wrapper_MESA_htable_set_opt_func(MESA_htable_handle table, enum MESA_htable_opt opt_type, void * val, size_t len)
{
int ret = MESA_htable_set_opt(table, opt_type, val, (int)len);
assert(ret == 0);
return ret;
}
static void key_keeper_free_serialized(void* data)
{
printf("call key_keeper_free_serialized\n");
struct keyring_private* kyr = (struct keyring_private*)data;
key_keeper_free_keyring(&(kyr->head));
}
static MESA_htable_handle create_hash_table(unsigned int slot_size, unsigned int expire_seconds)
{
int ret = 0;
unsigned max_num = slot_size * 4;
MESA_htable_handle htable = MESA_htable_born();
ret = __wrapper_MESA_htable_set_opt(htable, MHO_SCREEN_PRINT_CTRL, 0);
ret = __wrapper_MESA_htable_set_opt(htable, MHO_THREAD_SAFE, 1);
ret = __wrapper_MESA_htable_set_opt(htable, MHO_MUTEX_NUM, 16);
ret = __wrapper_MESA_htable_set_opt(htable, MHO_HASH_SLOT_SIZE, slot_size);
ret = __wrapper_MESA_htable_set_opt(htable, MHO_HASH_MAX_ELEMENT_NUM, max_num);
ret = __wrapper_MESA_htable_set_opt(htable, MHO_EXPIRE_TIME, expire_seconds);
ret = __wrapper_MESA_htable_set_opt(htable, MHO_ELIMIMINATE_TYPE,
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_SCREEN_PRINT_CTRL, 0);
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_THREAD_SAFE, 1);
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_MUTEX_NUM, 16);
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_HASH_SLOT_SIZE, slot_size);
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_HASH_MAX_ELEMENT_NUM, max_num);
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_EXPIRE_TIME, expire_seconds);
ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_ELIMIMINATE_TYPE,
HASH_ELIMINATE_ALGO_FIFO);
//TODO: how to do overide?
//ret = __wrapper_MESA_htable_set_opt(htable, MHO_CBFUN_DATA_FREE,
// (void *)key_keeper_free_serialized);
ret = __wrapper_MESA_htable_set_opt_func(htable, MHO_CBFUN_DATA_FREE,
(void *)key_keeper_free_serialized, sizeof(&key_keeper_free_serialized));
//ret = __wrapper_MESA_htable_set_opt(htable, MHO_CBFUN_DATA_EXPIRE_NOTIFY,
// (void *)key_keeper_verify_cb);
ret = MESA_htable_mature(htable);

View File

@@ -8,21 +8,31 @@ void ask_key_keeper_on_succ(void* result, void* user);
void ask_key_keeper_on_fail(enum e_future_error error, const char * what, void * user);
struct key_keeper_ctx{
struct key_keeper* keeper;
struct future* f;
};
int main()
{
void* logger = NULL;
future_promise_library_init();
struct event_base* evbase = event_base_new();
//struct event_base* evbase = event_base_new();
struct key_keeper * keeper = key_keeper_init("./conf/tfe.conf", "key_keeper", logger);
struct promise* user = NULL;
struct future* f = future_create("key_keeper", ask_key_keeper_on_succ, ask_key_keeper_on_fail, user);
struct key_keeper_ctx* ctx = ALLOC(struct key_keeper_ctx, 1);
ctx->keeper = keeper;
struct future* f = future_create("key_keeper", ask_key_keeper_on_succ, ask_key_keeper_on_fail, ctx);
ctx->f = f;
X509* origin_cert = ssl_x509_load("./conf/origin_cert.pem");
printf("-------------------------------\n");
int i = 0;
printf("call key_keeper_async_ask, i = %d\n", i);
key_keeper_async_ask(f, keeper, "www.baidu.com", 1, origin_cert, 1, evbase);
event_base_dispatch(evbase);
key_keeper_async_ask(f, keeper, "www.baidu.com", 1, origin_cert, 1, NULL);
X509_free(origin_cert);
key_keeper_destroy(keeper);
future_destroy(f);
free(ctx);
//event_base_dispatch(evbase);
/*
struct event_base* evbase1 = event_base_new();
struct future* f1 = future_create("key_keeper", ask_key_keeper_on_succ, ask_key_keeper_on_fail, user);
@@ -50,6 +60,7 @@ void ask_key_keeper_on_succ(void* result, void* user)
{
printf("chain is not null\n");
}
key_keeper_free_keyring(kyr);
return;
}