This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
doris-doris-dispatch/client/nirvana_conhash.h
linuxrc@163.com 26b1a08500 创建
2021-07-16 16:06:59 +08:00

51 lines
1.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __NVN_CONSISTENT_HASH_H__
#define __NVN_CONSISTENT_HASH_H__
#include <stdint.h>
#ifndef CONHASH_MAX_POINTS_PER_BUCKET
#define CONHASH_MAX_POINTS_PER_BUCKET 128
#endif
#ifdef __cplusplus
extern "C"
{
#endif
enum CONHASH_ERRCODE
{
CONHASH_OK = 0,
CONHASH_ERR_INVALID_ARGS = -1,
CONHASH_BUCKET_NOT_FOUND = -2,
CONHASH_BUCKET_ALREADY_EXIST=-3,
CONHASH_NO_VALID_BUCKETS=-4,
};
struct conhash_bucket
{
uint32_t bucket_id;
uint32_t point_num; /*should be not more than CONHASH_MAX_POINTS_PER_BUCKET*/
void* tag;
};
struct consistent_hash;
/*APIÏ̲߳»°²È«*/
struct consistent_hash *conhash_instance_new(const struct conhash_bucket *buckets, uint32_t bucket_num);
void conhash_instance_free(struct consistent_hash *ch);
struct consistent_hash *conhash_instance_copy(struct consistent_hash *ch);
enum CONHASH_ERRCODE conhash_insert_bucket(struct consistent_hash *ch,const struct conhash_bucket* bucket);
enum CONHASH_ERRCODE conhash_remove_bucket(struct consistent_hash *ch, u_int32_t bucket_id, void (*free_cb)(void *tag, u_int32_t point_num));
enum CONHASH_ERRCODE conhash_renew_bucket(struct consistent_hash *ch, struct conhash_bucket* bucket); /*¸üÐÂpoint_numºÍtag*/
enum CONHASH_ERRCODE conhash_lookup_bucket(struct consistent_hash *ch, const void* key, int len, struct conhash_bucket *result/*OUT*/);
enum CONHASH_ERRCODE conhash_lookup_bucket_int(struct consistent_hash *ch, u_int64_t randint, struct conhash_bucket* result);
double conhash_calulate_CVRSMD(struct consistent_hash *p);
u_int32_t conhash_get_bucket_num(struct consistent_hash *ch);
#ifdef __cplusplus
}
#endif
#endif