3
3
#define _DEFAULT_SOURCE /* For usleep */
4
4
5
5
#include "valkeymodule.h"
6
+ #include <pthread.h>
6
7
#include <stdio.h>
7
8
#include <string.h>
8
9
#include <strings.h>
9
- #include <pthread.h>
10
10
#include <unistd.h>
11
11
12
12
#define EVENT_LOG_MAX_SIZE 1024
@@ -31,7 +31,7 @@ typedef struct BackgroundThreadData {
31
31
} BackgroundThreadData ;
32
32
33
33
static void * GenericEvent_BackgroundWork (void * arg ) {
34
- BackgroundThreadData * data = (BackgroundThreadData * )arg ;
34
+ BackgroundThreadData * data = (BackgroundThreadData * )arg ;
35
35
// Sleep for 1 second
36
36
sleep (1 );
37
37
pthread_mutex_lock (& event_log_mutex );
@@ -47,26 +47,34 @@ static void *GenericEvent_BackgroundWork(void *arg) {
47
47
pthread_exit (NULL );
48
48
}
49
49
50
- static int KeySpace_NotificationGeneric (ValkeyModuleCtx * ctx , int type , const char * event , ValkeyModuleString * key ){
50
+ static int KeySpace_NotificationGeneric (ValkeyModuleCtx * ctx , int type ,
51
+ const char * event ,
52
+ ValkeyModuleString * key ) {
51
53
VALKEYMODULE_NOT_USED (ctx );
52
54
VALKEYMODULE_NOT_USED (type );
53
55
ValkeyModuleString * retained_key = ValkeyModule_HoldString (ctx , key );
54
- ValkeyModuleBlockedClient * bc = ValkeyModule_BlockClient (ctx , NULL , NULL , NULL , 0 );
56
+ ValkeyModuleBlockedClient * bc =
57
+ ValkeyModule_BlockClient (ctx , NULL , NULL , NULL , 0 );
55
58
if (bc == NULL ) {
56
- ValkeyModule_Log (ctx , VALKEYMODULE_LOGLEVEL_NOTICE , "Failed to block for event %s on %s!" , event , ValkeyModule_StringPtrLen (key , NULL ));
59
+ ValkeyModule_Log (ctx , VALKEYMODULE_LOGLEVEL_NOTICE ,
60
+ "Failed to block for event %s on %s!" , event ,
61
+ ValkeyModule_StringPtrLen (key , NULL ));
57
62
}
58
- BackgroundThreadData * data = ValkeyModule_Alloc (sizeof (BackgroundThreadData ));
63
+ BackgroundThreadData * data =
64
+ ValkeyModule_Alloc (sizeof (BackgroundThreadData ));
59
65
data -> bc = bc ;
60
- KeyspaceEventData * event_data = ValkeyModule_Alloc (sizeof (KeyspaceEventData ));
66
+ KeyspaceEventData * event_data =
67
+ ValkeyModule_Alloc (sizeof (KeyspaceEventData ));
61
68
event_data -> key = retained_key ;
62
69
event_data -> event = ValkeyModule_CreateString (ctx , event , strlen (event ));
63
70
data -> event = event_data ;
64
71
pthread_t tid ;
65
- pthread_create (& tid , NULL , GenericEvent_BackgroundWork , (void * )data );
72
+ pthread_create (& tid , NULL , GenericEvent_BackgroundWork , (void * )data );
66
73
return VALKEYMODULE_OK ;
67
74
}
68
75
69
- static int cmdGetEvents (ValkeyModuleCtx * ctx , ValkeyModuleString * * argv , int argc ) {
76
+ static int cmdGetEvents (ValkeyModuleCtx * ctx , ValkeyModuleString * * argv ,
77
+ int argc ) {
70
78
VALKEYMODULE_NOT_USED (argv );
71
79
VALKEYMODULE_NOT_USED (argc );
72
80
pthread_mutex_lock (& event_log_mutex );
@@ -82,7 +90,8 @@ static int cmdGetEvents(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int arg
82
90
return VALKEYMODULE_OK ;
83
91
}
84
92
85
- static int cmdClearEvents (ValkeyModuleCtx * ctx , ValkeyModuleString * * argv , int argc ) {
93
+ static int cmdClearEvents (ValkeyModuleCtx * ctx , ValkeyModuleString * * argv ,
94
+ int argc ) {
86
95
VALKEYMODULE_NOT_USED (argv );
87
96
VALKEYMODULE_NOT_USED (argc );
88
97
pthread_mutex_lock (& event_log_mutex );
@@ -100,10 +109,12 @@ static int cmdClearEvents(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int a
100
109
101
110
/* This function must be present on each Valkey module. It is used in order to
102
111
* register the commands into the Valkey server. */
103
- int ValkeyModule_OnLoad (ValkeyModuleCtx * ctx , ValkeyModuleString * * argv , int argc ) {
112
+ int ValkeyModule_OnLoad (ValkeyModuleCtx * ctx , ValkeyModuleString * * argv ,
113
+ int argc ) {
104
114
VALKEYMODULE_NOT_USED (argv );
105
115
VALKEYMODULE_NOT_USED (argc );
106
- if (ValkeyModule_Init (ctx ,"testblockingkeyspacenotif" ,1 ,VALKEYMODULE_APIVER_1 ) == VALKEYMODULE_ERR ){
116
+ if (ValkeyModule_Init (ctx , "testblockingkeyspacenotif" , 1 ,
117
+ VALKEYMODULE_APIVER_1 ) == VALKEYMODULE_ERR ) {
107
118
return VALKEYMODULE_ERR ;
108
119
}
109
120
event_log = ValkeyModule_Alloc (sizeof (KeyspaceEventLog ));
@@ -113,31 +124,31 @@ int ValkeyModule_OnLoad(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int arg
113
124
// VALKEYMODULE_NOTIFY_LOADED event are not supported we can not start
114
125
return VALKEYMODULE_ERR ;
115
126
}
116
- if (ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_LOADED , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
117
- return VALKEYMODULE_ERR ;
118
- }
119
- if ( ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_GENERIC , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
120
- return VALKEYMODULE_ERR ;
121
- }
122
- if ( ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_EXPIRED , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
123
- return VALKEYMODULE_ERR ;
124
- }
125
- if ( ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_MODULE , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
126
- return VALKEYMODULE_ERR ;
127
- }
128
- if ( ValkeyModule_SubscribeToKeyspaceEvents ( ctx , VALKEYMODULE_NOTIFY_KEY_MISS , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
129
- return VALKEYMODULE_ERR ;
130
- }
131
- if ( ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_STRING , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
132
- return VALKEYMODULE_ERR ;
133
- }
134
- if ( ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_HASH , KeySpace_NotificationGeneric ) != VALKEYMODULE_OK ){
135
- return VALKEYMODULE_ERR ;
136
- }
137
- if ( ValkeyModule_CreateCommand (ctx ,"b_keyspace.events" , cmdGetEvents ,"" ,0 , 0 , 0 ) == VALKEYMODULE_ERR ){
138
- return VALKEYMODULE_ERR ;
139
- }
140
- if ( ValkeyModule_CreateCommand ( ctx , "b_keyspace.clear" , cmdClearEvents , "" , 0 , 0 , 0 ) == VALKEYMODULE_ERR ){
127
+ if (ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_LOADED ,
128
+ KeySpace_NotificationGeneric ) !=
129
+ VALKEYMODULE_OK ||
130
+ ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_GENERIC ,
131
+ KeySpace_NotificationGeneric ) !=
132
+ VALKEYMODULE_OK ||
133
+ ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_EXPIRED ,
134
+ KeySpace_NotificationGeneric ) !=
135
+ VALKEYMODULE_OK ||
136
+ ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_MODULE ,
137
+ KeySpace_NotificationGeneric ) !=
138
+ VALKEYMODULE_OK ||
139
+ ValkeyModule_SubscribeToKeyspaceEvents (
140
+ ctx , VALKEYMODULE_NOTIFY_KEY_MISS , KeySpace_NotificationGeneric ) !=
141
+ VALKEYMODULE_OK ||
142
+ ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_STRING ,
143
+ KeySpace_NotificationGeneric ) !=
144
+ VALKEYMODULE_OK ||
145
+ ValkeyModule_SubscribeToKeyspaceEvents (ctx , VALKEYMODULE_NOTIFY_HASH ,
146
+ KeySpace_NotificationGeneric ) !=
147
+ VALKEYMODULE_OK ||
148
+ ValkeyModule_CreateCommand (ctx , "b_keyspace.events" , cmdGetEvents , "" ,
149
+ 0 , 0 , 0 ) == VALKEYMODULE_ERR ||
150
+ ValkeyModule_CreateCommand ( ctx , "b_keyspace.clear" , cmdClearEvents , "" ,
151
+ 0 , 0 , 0 ) == VALKEYMODULE_ERR ) {
141
152
return VALKEYMODULE_ERR ;
142
153
}
143
154
return VALKEYMODULE_OK ;
@@ -156,4 +167,3 @@ int ValkeyModule_OnUnload(ValkeyModuleCtx *ctx) {
156
167
pthread_mutex_unlock (& event_log_mutex );
157
168
return VALKEYMODULE_OK ;
158
169
}
159
-
0 commit comments