Repository: redis/redis

Issue:
[QUESTION]  utils/hashtable/rehashing.c  can't  compile ,it seem old version file not update
I see README  

Compile with:

    cc -I ../../src/ rehashing.c ../../src/zmalloc.c ../../src/dict.c -o rehashing_test

but failed  

1: redis.h file not exists
2: dictht struct not exists 

cc -I ../../src/ rehashing.c ../../src/zmalloc.c ../../src/dict.c -o rehashing_test
rehashing.c:1:10: fatal error: redis.h: No such file or directory
 #include "redis.h"
          ^~~~~~~~~
compilation terminated.



Discussion:
Yes, this code is a bit out of date... note `redis.h` is not longer exists (rename to sever.h)
and there may be other problems, it has been too long and there are a lot of major changes in redis
Yes, this seems like a very old version of Redis, please check out a more recent version and try compiling again.
@madolson i suppose we can just remove the file, it is really outdated and i guessing no one will use it now
@enjoy-binbin Sure, want to delete it?

Patch:
diff --git a/utils/hashtable/README b/utils/hashtable/README
deleted file mode 100644
index 87ffc2f08a4..00000000000
--- a/utils/hashtable/README
+++ /dev/null
@@ -1,13 +0,0 @@
-Hash table implementation related utilities.
-
-rehashing.c
----
-
-Visually show buckets in the two hash tables between rehashings. Also stress
-test getRandomKeys() implementation, that may actually disappear from
-Redis soon, However the visualization code is reusable in new bugs
-investigation.
-
-Compile with:
-
-    cc -I ../../src/ rehashing.c ../../src/zmalloc.c ../../src/dict.c -o rehashing_test
diff --git a/utils/hashtable/rehashing.c b/utils/hashtable/rehashing.c
deleted file mode 100644
index 3c0acb84c66..00000000000
--- a/utils/hashtable/rehashing.c
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "redis.h"
-#include "dict.h"
-
-void _redisAssert(char *x, char *y, int l) {
-    printf("ASSERT: %s %s %d\n",x,y,l);
-    exit(1);
-}
-
-unsigned int dictKeyHash(const void *keyp) {
-    unsigned long key = (unsigned long)keyp;
-    key = dictGenHashFunction(&key,sizeof(key));
-    key += ~(key << 15);
-    key ^=  (key >> 10);
-    key +=  (key << 3);
-    key ^=  (key >> 6);
-    key += ~(key << 11);
-    key ^=  (key >> 16);
-    return key;
-}
-
-int dictKeyCompare(void *privdata, const void *key1, const void *key2) {
-    unsigned long k1 = (unsigned long)key1;
-    unsigned long k2 = (unsigned long)key2;
-    return k1 == k2;
-}
-
-dictType dictTypeTest = {
-    dictKeyHash,                   /* hash function */
-    NULL,                          /* key dup */
-    NULL,                          /* val dup */
-    dictKeyCompare,                /* key compare */
-    NULL,                          /* key destructor */
-    NULL,                          /* val destructor */
-    NULL                           /* allow to expand */
-};
-
-void showBuckets(dictht ht) {
-    if (ht.table == NULL) {
-        printf("NULL\n");
-    } else {
-        int j;
-        for (j = 0; j < ht.size; j++) {
-            printf("%c", ht.table[j] ? '1' : '0');
-        }
-        printf("\n");
-    }
-}
-
-void show(dict *d) {
-    int j;
-    if (d->rehashidx != -1) {
-        printf("rhidx: ");
-        for (j = 0; j < d->rehashidx; j++)
-            printf(".");
-        printf("|\n");
-    }
-    printf("ht[0]: ");
-    showBuckets(d->ht[0]);
-    printf("ht[1]: ");
-    showBuckets(d->ht[1]);
-    printf("\n");
-}
-
-int sortPointers(const void *a, const void *b) {
-    unsigned long la, lb;
-
-    la = (long) (*((dictEntry**)a));
-    lb = (long) (*((dictEntry**)b));
-    return la-lb;
-}
-
-void stressGetKeys(dict *d, int times, int *perfect_run, int *approx_run) {
-    int j;
-
-    dictEntry **des = zmalloc(sizeof(dictEntry*)*dictSize(d));
-    for (j = 0; j < times; j++) {
-        int requested = rand() % (dictSize(d)+1);
-        int returned = dictGetSomeKeys(d, des, requested);
-        int dup = 0;
-
-        qsort(des,returned,sizeof(dictEntry*),sortPointers);
-        if (returned > 1) {
-            int i;
-            for (i = 0; i < returned-1; i++) {
-                if (des[i] == des[i+1]) dup++;
-            }
-        }
-
-        if (requested == returned && dup == 0) {
-            (*perfect_run)++;
-        } else {
-            (*approx_run)++;
-            printf("Requested, returned, duplicated: %d %d %d\n",
-                requested, returned, dup);
-        }
-    }
-    zfree(des);
-}
-
-#define MAX1 120
-#define MAX2 1000
-int main(void) {
-    dict *d = dictCreate(&dictTypeTest,NULL);
-    unsigned long i;
-    srand(time(NULL));
-
-    for (i = 0; i < MAX1; i++) {
-        dictAdd(d,(void*)i,NULL);
-        show(d);
-    }
-    printf("Size: %d\n", (int)dictSize(d));
-
-    for (i = 0; i < MAX1; i++) {
-        dictDelete(d,(void*)i);
-        dictResize(d);
-        show(d);
-    }
-    dictRelease(d);
-
-    d = dictCreate(&dictTypeTest,NULL);
-
-    printf("Stress testing dictGetSomeKeys\n");
-    int perfect_run = 0, approx_run = 0;
-
-    for (i = 0; i < MAX2; i++) {
-        dictAdd(d,(void*)i,NULL);
-        stressGetKeys(d,100,&perfect_run,&approx_run);
-    }
-
-    for (i = 0; i < MAX2; i++) {
-        dictDelete(d,(void*)i);
-        dictResize(d);
-        stressGetKeys(d,100,&perfect_run,&approx_run);
-    }
-
-    printf("dictGetSomeKey, %d perfect runs, %d approximated runs\n",
-        perfect_run, approx_run);
-
-    dictRelease(d);
-
-    printf("TEST PASSED!\n");
-    return 0;
-}