@@ -239,11 +239,14 @@ This flag should not be used directly by the module.
239239#define REDISMODULE_NOTIFY_LOADED (1<<12) /* module only key space notification, indicate a key loaded from rdb */
240240#define REDISMODULE_NOTIFY_MODULE (1<<13) /* d, module key space notification */
241241#define REDISMODULE_NOTIFY_NEW (1<<14) /* n, new key notification */
242+ #define REDISMODULE_NOTIFY_OVERWRITTEN (1<<15) /* o, key overwrite notification */
243+ #define REDISMODULE_NOTIFY_TYPE_CHANGED (1<<16) /* c, key type changed notification */
244+ #define REDISMODULE_NOTIFY_KEY_TRIMMED (1<<17) /* module only key space notification, indicates a key trimmed during slot migration */
242245
243246/* Next notification flag, must be updated when adding new flags above!
244247This flag should not be used directly by the module.
245248 * Use RedisModule_GetKeyspaceNotificationFlagsAll instead. */
246- #define _REDISMODULE_NOTIFY_NEXT (1<<15 )
249+ #define _REDISMODULE_NOTIFY_NEXT (1<<18 )
247250
248251#define REDISMODULE_NOTIFY_ALL (REDISMODULE_NOTIFY_GENERIC | REDISMODULE_NOTIFY_STRING | REDISMODULE_NOTIFY_LIST | REDISMODULE_NOTIFY_SET | REDISMODULE_NOTIFY_HASH | REDISMODULE_NOTIFY_ZSET | REDISMODULE_NOTIFY_EXPIRED | REDISMODULE_NOTIFY_EVICTED | REDISMODULE_NOTIFY_STREAM | REDISMODULE_NOTIFY_MODULE) /* A */
249252
@@ -510,7 +513,9 @@ typedef void (*RedisModuleEventLoopOneShotFunc)(void *user_data);
510513#define REDISMODULE_EVENT_EVENTLOOP 15
511514#define REDISMODULE_EVENT_CONFIG 16
512515#define REDISMODULE_EVENT_KEY 17
513- #define _REDISMODULE_EVENT_NEXT 18 /* Next event flag, should be updated if a new event added. */
516+ #define REDISMODULE_EVENT_CLUSTER_SLOT_MIGRATION 18
517+ #define REDISMODULE_EVENT_CLUSTER_SLOT_MIGRATION_TRIM 19
518+ #define _REDISMODULE_EVENT_NEXT 20 /* Next event flag, should be updated if a new event added. */
514519
515520typedef struct RedisModuleEvent {
516521 uint64_t id ; /* REDISMODULE_EVENT_... defines. */
@@ -621,6 +626,14 @@ static const RedisModuleEvent
621626 RedisModuleEvent_Key = {
622627 REDISMODULE_EVENT_KEY ,
623628 1
629+ },
630+ RedisModuleEvent_ClusterSlotMigration = {
631+ REDISMODULE_EVENT_CLUSTER_SLOT_MIGRATION ,
632+ 1
633+ },
634+ RedisModuleEvent_ClusterSlotMigrationTrim = {
635+ REDISMODULE_EVENT_CLUSTER_SLOT_MIGRATION_TRIM ,
636+ 1
624637 };
625638
626639/* Those are values that are used for the 'subevent' callback argument. */
@@ -699,6 +712,20 @@ static const RedisModuleEvent
699712#define _REDISMODULE_SUBEVENT_CRON_LOOP_NEXT 0
700713#define _REDISMODULE_SUBEVENT_SWAPDB_NEXT 0
701714
715+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_IMPORT_STARTED 0
716+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_IMPORT_FAILED 1
717+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_IMPORT_COMPLETED 2
718+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_MIGRATE_STARTED 3
719+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_MIGRATE_FAILED 4
720+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_MIGRATE_COMPLETED 5
721+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_MIGRATE_MODULE_PROPAGATE 6
722+ #define _REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_NEXT 7
723+
724+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_TRIM_STARTED 0
725+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_TRIM_COMPLETED 1
726+ #define REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_TRIM_BACKGROUND 2
727+ #define _REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_TRIM_NEXT 3
728+
702729/* RedisModuleClientInfo flags. */
703730#define REDISMODULE_CLIENTINFO_FLAG_SSL (1<<0)
704731#define REDISMODULE_CLIENTINFO_FLAG_PUBSUB (1<<1)
@@ -828,13 +855,55 @@ typedef struct RedisModuleKeyInfo {
828855
829856#define RedisModuleKeyInfo RedisModuleKeyInfoV1
830857
858+ typedef struct RedisModuleSlotRange {
859+ uint16_t start ;
860+ uint16_t end ;
861+ } RedisModuleSlotRange ;
862+
863+ typedef struct RedisModuleSlotRangeArray {
864+ int32_t num_ranges ;
865+ RedisModuleSlotRange ranges [];
866+ } RedisModuleSlotRangeArray ;
867+
868+ #define REDISMODULE_CLUSTER_SLOT_MIGRATION_INFO_VERSION 1
869+
870+ typedef struct RedisModuleClusterSlotMigrationInfo {
871+ uint64_t version ; /* Not used since this structure is never passed
872+ from the module to the core right now. Here
873+ for future compatibility. */
874+ char source_node_id [REDISMODULE_NODE_ID_LEN + 1 ];
875+ char destination_node_id [REDISMODULE_NODE_ID_LEN + 1 ];
876+ const char * task_id ;
877+ RedisModuleSlotRangeArray * slots ;
878+ } RedisModuleClusterSlotMigrationInfoV1 ;
879+
880+ #define RedisModuleClusterSlotMigrationInfo RedisModuleClusterSlotMigrationInfoV1
881+
882+ #define REDISMODULE_CLUSTER_SLOT_MIGRATION_TRIMINFO_VERSION 1
883+
884+ typedef struct RedisModuleClusterSlotMigrationTrimInfo {
885+ uint64_t version ; /* Not used since this structure is never passed
886+ from the module to the core right now. Here
887+ for future compatibility. */
888+ RedisModuleSlotRangeArray * slots ;
889+ } RedisModuleClusterSlotMigrationTrimInfoV1 ;
890+
891+ #define RedisModuleClusterSlotMigrationTrimInfo RedisModuleClusterSlotMigrationTrimInfoV1
892+
831893typedef enum {
832894 REDISMODULE_ACL_LOG_AUTH = 0 , /* Authentication failure */
833895 REDISMODULE_ACL_LOG_CMD , /* Command authorization failure */
834896 REDISMODULE_ACL_LOG_KEY , /* Key authorization failure */
835897 REDISMODULE_ACL_LOG_CHANNEL /* Channel authorization failure */
836898} RedisModuleACLLogEntryReason ;
837899
900+ typedef enum {
901+ REDISMODULE_CONFIG_TYPE_STRING = 0 ,
902+ REDISMODULE_CONFIG_TYPE_ENUM ,
903+ REDISMODULE_CONFIG_TYPE_NUMERIC ,
904+ REDISMODULE_CONFIG_TYPE_BOOL ,
905+ } RedisModuleConfigType ;
906+
838907/* Incomplete structures needed by both the core and modules. */
839908typedef struct RedisModuleIO RedisModuleIO ;
840909typedef struct RedisModuleDigest RedisModuleDigest ;
@@ -896,6 +965,7 @@ typedef struct RedisModuleScanCursor RedisModuleScanCursor;
896965typedef struct RedisModuleUser RedisModuleUser ;
897966typedef struct RedisModuleKeyOptCtx RedisModuleKeyOptCtx ;
898967typedef struct RedisModuleRdbStream RedisModuleRdbStream ;
968+ typedef struct RedisModuleConfigIterator RedisModuleConfigIterator ;
899969
900970typedef int (* RedisModuleCmdFunc )(RedisModuleCtx * ctx , RedisModuleString * * argv , int argc );
901971typedef void (* RedisModuleDisconnectFunc )(RedisModuleCtx * ctx , RedisModuleBlockedClient * bc );
@@ -1254,6 +1324,7 @@ REDISMODULE_API void (*RedisModule_ThreadSafeContextLock)(RedisModuleCtx *ctx) R
12541324REDISMODULE_API int (* RedisModule_ThreadSafeContextTryLock )(RedisModuleCtx * ctx ) REDISMODULE_ATTR ;
12551325REDISMODULE_API void (* RedisModule_ThreadSafeContextUnlock )(RedisModuleCtx * ctx ) REDISMODULE_ATTR ;
12561326REDISMODULE_API int (* RedisModule_SubscribeToKeyspaceEvents )(RedisModuleCtx * ctx , int types , RedisModuleNotificationFunc cb ) REDISMODULE_ATTR ;
1327+ REDISMODULE_API int (* RedisModule_UnsubscribeFromKeyspaceEvents )(RedisModuleCtx * ctx , int types , RedisModuleNotificationFunc cb ) REDISMODULE_ATTR ;
12571328REDISMODULE_API int (* RedisModule_AddPostNotificationJob )(RedisModuleCtx * ctx , RedisModulePostNotificationJobFunc callback , void * pd , void (* free_pd )(void * )) REDISMODULE_ATTR ;
12581329REDISMODULE_API int (* RedisModule_NotifyKeyspaceEvent )(RedisModuleCtx * ctx , int type , const char * event , RedisModuleString * key ) REDISMODULE_ATTR ;
12591330REDISMODULE_API int (* RedisModule_GetNotifyKeyspaceEvents )(void ) REDISMODULE_ATTR ;
@@ -1275,6 +1346,10 @@ REDISMODULE_API void (*RedisModule_SetClusterFlags)(RedisModuleCtx *ctx, uint64_
12751346REDISMODULE_API unsigned int (* RedisModule_ClusterKeySlot )(RedisModuleString * key ) REDISMODULE_ATTR ;
12761347REDISMODULE_API unsigned int (* RedisModule_ClusterKeySlotC )(const char * keystr , size_t keylen ) REDISMODULE_ATTR ;
12771348REDISMODULE_API const char * (* RedisModule_ClusterCanonicalKeyNameInSlot )(unsigned int slot ) REDISMODULE_ATTR ;
1349+ REDISMODULE_API int (* RedisModule_ClusterCanAccessKeysInSlot )(int slot ) REDISMODULE_ATTR ;
1350+ REDISMODULE_API int (* RedisModule_ClusterPropagateForSlotMigration )(RedisModuleCtx * ctx , const char * cmdname , const char * fmt , ...) REDISMODULE_ATTR ;
1351+ REDISMODULE_API RedisModuleSlotRangeArray * (* RedisModule_ClusterGetLocalSlotRanges )(RedisModuleCtx * ctx ) REDISMODULE_ATTR ;
1352+ REDISMODULE_API void (* RedisModule_ClusterFreeSlotRanges )(RedisModuleCtx * ctx , RedisModuleSlotRangeArray * slots ) REDISMODULE_ATTR ;
12781353REDISMODULE_API int (* RedisModule_ExportSharedAPI )(RedisModuleCtx * ctx , const char * apiname , void * func ) REDISMODULE_ATTR ;
12791354REDISMODULE_API void * (* RedisModule_GetSharedAPI )(RedisModuleCtx * ctx , const char * apiname ) REDISMODULE_ATTR ;
12801355REDISMODULE_API RedisModuleCommandFilter * (* RedisModule_RegisterCommandFilter )(RedisModuleCtx * ctx , RedisModuleCommandFilterFunc cb , int flags ) REDISMODULE_ATTR ;
@@ -1343,6 +1418,18 @@ REDISMODULE_API void (*RedisModule_RdbStreamFree)(RedisModuleRdbStream *stream)
13431418REDISMODULE_API int (* RedisModule_RdbLoad )(RedisModuleCtx * ctx , RedisModuleRdbStream * stream , int flags ) REDISMODULE_ATTR ;
13441419REDISMODULE_API int (* RedisModule_RdbSave )(RedisModuleCtx * ctx , RedisModuleRdbStream * stream , int flags ) REDISMODULE_ATTR ;
13451420REDISMODULE_API const char * (* RedisModule_GetInternalSecret )(RedisModuleCtx * ctx , size_t * len ) REDISMODULE_ATTR ;
1421+ REDISMODULE_API RedisModuleConfigIterator * (* RedisModule_ConfigIteratorCreate )(RedisModuleCtx * ctx , const char * pattern ) REDISMODULE_ATTR ;
1422+ REDISMODULE_API void (* RedisModule_ConfigIteratorRelease )(RedisModuleCtx * ctx , RedisModuleConfigIterator * iter ) REDISMODULE_ATTR ;
1423+ REDISMODULE_API const char * (* RedisModule_ConfigIteratorNext )(RedisModuleConfigIterator * iter ) REDISMODULE_ATTR ;
1424+ REDISMODULE_API int (* RedisModule_ConfigGetType )(const char * name , RedisModuleConfigType * res ) REDISMODULE_ATTR ;
1425+ REDISMODULE_API int (* RedisModule_ConfigGet )(RedisModuleCtx * ctx , const char * name , RedisModuleString * * res ) REDISMODULE_ATTR ;
1426+ REDISMODULE_API int (* RedisModule_ConfigGetBool )(RedisModuleCtx * ctx , const char * name , int * res ) REDISMODULE_ATTR ;
1427+ REDISMODULE_API int (* RedisModule_ConfigGetEnum )(RedisModuleCtx * ctx , const char * name , RedisModuleString * * res ) REDISMODULE_ATTR ;
1428+ REDISMODULE_API int (* RedisModule_ConfigGetNumeric )(RedisModuleCtx * ctx , const char * name , long long * res ) REDISMODULE_ATTR ;
1429+ REDISMODULE_API int (* RedisModule_ConfigSet )(RedisModuleCtx * ctx , const char * name , RedisModuleString * value , RedisModuleString * * err ) REDISMODULE_ATTR ;
1430+ REDISMODULE_API int (* RedisModule_ConfigSetBool )(RedisModuleCtx * ctx , const char * name , int value , RedisModuleString * * err ) REDISMODULE_ATTR ;
1431+ REDISMODULE_API int (* RedisModule_ConfigSetEnum )(RedisModuleCtx * ctx , const char * name , RedisModuleString * value , RedisModuleString * * err ) REDISMODULE_ATTR ;
1432+ REDISMODULE_API int (* RedisModule_ConfigSetNumeric )(RedisModuleCtx * ctx , const char * name , long long value , RedisModuleString * * err ) REDISMODULE_ATTR ;
13461433
13471434#define RedisModule_IsAOFClient (id ) ((id ) == UINT64_MAX )
13481435
@@ -1635,6 +1722,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
16351722 REDISMODULE_GET_API (BlockedClientMeasureTimeEnd );
16361723 REDISMODULE_GET_API (SetDisconnectCallback );
16371724 REDISMODULE_GET_API (SubscribeToKeyspaceEvents );
1725+ REDISMODULE_GET_API (UnsubscribeFromKeyspaceEvents );
16381726 REDISMODULE_GET_API (AddPostNotificationJob );
16391727 REDISMODULE_GET_API (NotifyKeyspaceEvent );
16401728 REDISMODULE_GET_API (GetNotifyKeyspaceEvents );
@@ -1655,6 +1743,10 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
16551743 REDISMODULE_GET_API (ClusterKeySlot );
16561744 REDISMODULE_GET_API (ClusterKeySlotC );
16571745 REDISMODULE_GET_API (ClusterCanonicalKeyNameInSlot );
1746+ REDISMODULE_GET_API (ClusterCanAccessKeysInSlot );
1747+ REDISMODULE_GET_API (ClusterPropagateForSlotMigration );
1748+ REDISMODULE_GET_API (ClusterGetLocalSlotRanges );
1749+ REDISMODULE_GET_API (ClusterFreeSlotRanges );
16581750 REDISMODULE_GET_API (ExportSharedAPI );
16591751 REDISMODULE_GET_API (GetSharedAPI );
16601752 REDISMODULE_GET_API (RegisterCommandFilter );
@@ -1723,6 +1815,18 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
17231815 REDISMODULE_GET_API (RdbLoad );
17241816 REDISMODULE_GET_API (RdbSave );
17251817 REDISMODULE_GET_API (GetInternalSecret );
1818+ REDISMODULE_GET_API (ConfigIteratorCreate );
1819+ REDISMODULE_GET_API (ConfigIteratorRelease );
1820+ REDISMODULE_GET_API (ConfigIteratorNext );
1821+ REDISMODULE_GET_API (ConfigGetType );
1822+ REDISMODULE_GET_API (ConfigGet );
1823+ REDISMODULE_GET_API (ConfigGetBool );
1824+ REDISMODULE_GET_API (ConfigGetEnum );
1825+ REDISMODULE_GET_API (ConfigGetNumeric );
1826+ REDISMODULE_GET_API (ConfigSet );
1827+ REDISMODULE_GET_API (ConfigSetBool );
1828+ REDISMODULE_GET_API (ConfigSetEnum );
1829+ REDISMODULE_GET_API (ConfigSetNumeric );
17261830
17271831
17281832#ifdef REDISMODULE_RLEC_API_DEFS
0 commit comments