Redis-Cluster-Fast
view release on metacpan or search on metacpan
deps/hiredis-cluster/hircluster.h view on Meta::CPAN
#define HIRCLUSTER_EVENT_READY 2
#define HIRCLUSTER_EVENT_FREE_CONTEXT 3
/* The non-const connect callback API is not available when:
* - using hiredis prior v.1.1.0; or
* - built on Windows since hiredis_cluster.def can't have conditional definitions. */
#if !(HIREDIS_MAJOR >= 1 && HIREDIS_MINOR >= 1) || _WIN32
#define HIRCLUSTER_NO_NONCONST_CONNECT_CB
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct dict;
struct hilist;
struct redisClusterAsyncContext;
typedef int(adapterAttachFn)(redisAsyncContext *, void *);
typedef int(sslInitFn)(redisContext *, void *);
typedef void(redisClusterCallbackFn)(struct redisClusterAsyncContext *, void *,
void *);
typedef struct redisClusterNode {
sds name;
sds addr;
sds host;
uint16_t port;
uint8_t role;
uint8_t pad;
int failure_count; /* consecutive failing attempts in async */
redisContext *con;
redisAsyncContext *acon;
int64_t lastConnectionAttempt; /* Timestamp */
struct hilist *slots;
struct hilist *slaves;
struct hiarray *migrating; /* copen_slot[] */
struct hiarray *importing; /* copen_slot[] */
} redisClusterNode;
typedef struct cluster_slot {
uint32_t start;
uint32_t end;
redisClusterNode *node; /* master that this slot region belong to */
} cluster_slot;
typedef struct copen_slot {
uint32_t slot_num; /* slot number */
int migrate; /* migrating or importing? */
sds remote_name; /* name of node this slot migrating to/importing from */
redisClusterNode *node; /* master that this slot belong to */
} copen_slot;
/* Context for accessing a Redis Cluster */
typedef struct redisClusterContext {
int err; /* Error flags, 0 when there is no error */
char errstr[128]; /* String representation of error when applicable */
/* Configurations */
int flags; /* Configuration flags */
struct timeval *connect_timeout; /* TCP connect timeout */
struct timeval *command_timeout; /* Receive and send timeout */
int max_retry_count; /* Allowed retry attempts */
char *username; /* Authenticate using user */
char *password; /* Authentication password */
struct dict *nodes; /* Known redisClusterNode's */
uint64_t route_version; /* Increased when the node lookup table changes */
redisClusterNode **table; /* redisClusterNode lookup table */
struct hilist *requests; /* Outstanding commands (Pipelining) */
int retry_count; /* Current number of failing attempts */
int need_update_route; /* Indicator for redisClusterReset() (Pipel.) */
void *ssl; /* Pointer to a redisSSLContext when using SSL/TLS. */
sslInitFn *ssl_init_fn; /* Func ptr for SSL context initiation */
void (*on_connect)(const struct redisContext *c, int status);
void (*event_callback)(const struct redisClusterContext *cc, int event,
void *privdata);
void *event_privdata;
} redisClusterContext;
/* Context for accessing a Redis Cluster asynchronously */
typedef struct redisClusterAsyncContext {
redisClusterContext *cc;
int err; /* Error flags, 0 when there is no error */
char errstr[128]; /* String representation of error when applicable */
int64_t lastSlotmapUpdateAttempt; /* Timestamp */
void *adapter; /* Adapter to the async event library */
adapterAttachFn *attach_fn; /* Func ptr for attaching the async library */
/* Called when either the connection is terminated due to an error or per
* user request. The status is set accordingly (REDIS_OK, REDIS_ERR). */
redisDisconnectCallback *onDisconnect;
/* Called when the first write event was received. */
redisConnectCallback *onConnect;
#ifndef HIRCLUSTER_NO_NONCONST_CONNECT_CB
redisConnectCallbackNC *onConnectNC;
#endif
} redisClusterAsyncContext;
typedef struct redisClusterNodeIterator {
redisClusterContext *cc;
uint64_t route_version;
int retries_left;
dictIterator di;
} redisClusterNodeIterator;
/*
* Synchronous API
*/
redisClusterContext *redisClusterConnect(const char *addrs, int flags);
redisClusterContext *redisClusterConnectWithTimeout(const char *addrs,
( run in 1.650 second using v1.01-cache-2.11-cpan-39bf76dae61 )