From a6928675ba9695ada3c7149a795f689f5a535271 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 29 Aug 2019 13:35:28 -0400 Subject: [PATCH] TT#63000 add support for value-less master keys Adding a value-less key makes it a SET that contains all entry keys, making it possible to use SCARD to count all entries. Change-Id: I8da92944dda9df9c381d1a08ce23b142af68a69b (cherry picked from commit 390981eaf285683b3c5c591e0764f15199e99a1b) --- debian/patches/series | 1 + .../sipwise/db_redis_master_keys.patch | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 debian/patches/sipwise/db_redis_master_keys.patch diff --git a/debian/patches/series b/debian/patches/series index 4ba8583ce..dec5aff3f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -48,3 +48,4 @@ sipwise/db_redis_range_compare_timestamps.patch sipwise/db_redis_bigint_min_len.patch sipwise/db_redis_use_keys_instead_of_scan.patch sipwise/db_redis_versioning.patch +sipwise/db_redis_master_keys.patch diff --git a/debian/patches/sipwise/db_redis_master_keys.patch b/debian/patches/sipwise/db_redis_master_keys.patch new file mode 100644 index 000000000..a5fea5e29 --- /dev/null +++ b/debian/patches/sipwise/db_redis_master_keys.patch @@ -0,0 +1,38 @@ +--- a/src/modules/db_redis/redis_table.c ++++ b/src/modules/db_redis/redis_table.c +@@ -605,6 +605,10 @@ + column_name.s = start; + column_name.len = p - start; + start = ++p; ++ ++ if (!column_name.len) ++ break; ++ + /* + LM_DBG("found column name '%.*s' in type '%.*s' for table '%.*s'\n", + column_name.len, column_name.s, +--- a/src/modules/db_redis/redis_dbase.c ++++ b/src/modules/db_redis/redis_dbase.c +@@ -400,6 +400,22 @@ + } + } + ++ // for value-less master keys ++ if (!key_name->len) { ++ // :: ++ len = table->version_code.len + table_name->len + 1 + type_name->len + 1; ++ key_name->s = (char*)pkg_malloc(len); ++ if (!key_name->s) { ++ LM_ERR("Failed to allocate key memory\n"); ++ goto err; ++ } ++ snprintf(key_name->s, len, "%.*s%.*s:%.*s", ++ table->version_code.len, table->version_code.s, ++ table_name->len, table_name->s, ++ type_name->len, type_name->s); ++ key_name->len = len-1; ++ } ++ + return 0; + + err: