]> git.saurik.com Git - redis.git/commitdiff
Introduced three client limit classes: normal, slave, pubsub
authorantirez <antirez@gmail.com>
Tue, 17 Jan 2012 11:43:01 +0000 (12:43 +0100)
committerantirez <antirez@gmail.com>
Tue, 17 Jan 2012 11:43:01 +0000 (12:43 +0100)
src/networking.c
src/redis.h

index 61f849207f89fe60f37b0d6396147fa1a3f18a63..47fbcc58b6b452ff711bc772604c9614c4d90599 100644 (file)
@@ -1149,3 +1149,18 @@ unsigned long getClientOutputBufferMemoryUsage(redisClient *c) {
 
     return c->reply_bytes + (list_item_size*listLength(c->reply));
 }
+
+/* Get the class of a client, used in order to envorce limits to different
+ * classes of clients.
+ *
+ * The function will return one of the following:
+ * REDIS_CLIENT_LIMIT_CLASS_NORMAL -> Normal client
+ * REDIS_CLIENT_LIMIT_CLASS_SLAVE  -> Slave or client executing MONITOR command
+ * REDIS_CLIENT_LIMIT_CLASS_PUBSUB -> Client subscribed to Pub/Sub channels
+ */
+int getClientLimitClass(redisClient *c) {
+    if (c->flags & REDIS_SLAVE) return REDIS_CLIENT_LIMIT_CLASS_SLAVE;
+    if (dictSize(c->pubsub_channels) || listLength(c->pubsub_patterns))
+        return REDIS_CLIENT_LIMIT_CLASS_PUBSUB;
+    return REDIS_CLIENT_LIMIT_CLASS_NORMAL;
+}
index 430829755354614d1ec9f5bd8351db5e5c34757e..42ade8fc4fb726b1acaa1c49a0ef4c31f234792d 100644 (file)
 #define REDIS_REQ_INLINE 1
 #define REDIS_REQ_MULTIBULK 2
 
+/* Client classes for client limits, currently used only for
+ * the max-client-output-buffer limit implementation. */
+#define REDIS_CLIENT_LIMIT_CLASS_NORMAL 0
+#define REDIS_CLIENT_LIMIT_CLASS_SLAVE 1
+#define REDIS_CLIENT_LIMIT_CLASS_PUBSUB 2
+
 /* Slave replication state - slave side */
 #define REDIS_REPL_NONE 0 /* No active replication */
 #define REDIS_REPL_CONNECT 1 /* Must connect to master */