Author: vlendec
Date: 2005-09-30 13:23:38 +0000 (Fri, 30 Sep 2005)
New Revision: 10651

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10651

Log:
Start a little torture test for the dbwrap interface. dbwrap_file performs
better than tdb in /dev/shm for huge numbers of keys.... :-)

Volker

Modified:
   branches/tmp/vl-cluster/source/torture/torture.c


Changeset:
Modified: branches/tmp/vl-cluster/source/torture/torture.c
===================================================================
--- branches/tmp/vl-cluster/source/torture/torture.c    2005-09-30 11:56:39 UTC 
(rev 10650)
+++ branches/tmp/vl-cluster/source/torture/torture.c    2005-09-30 13:23:38 UTC 
(rev 10651)
@@ -4651,8 +4651,63 @@
        return True;
 }
 
+#define KEYLEN 5
+#define DATALEN 100
+
+static char *randbuf(int len)
+{
+       char *buf;
+       int i;
+       buf = (char *)SMB_MALLOC(len+1);
+
+       for (i=0;i<len;i++) {
+               buf[i] = 'a' + (rand() % 26);
+       }
+       buf[i] = 0;
+       return buf;
+}
+
 static BOOL run_dbwrap(int dummy)
 {
+       TALLOC_CTX *mem_ctx;
+       struct db_context *db;
+       int i;
+
+       mem_ctx = talloc_init("dbwrap %i", dummy);
+       if (mem_ctx == NULL) {
+               DEBUG(0, ("talloc_init failed\n"));
+               return False;
+       }
+
+       db = db_open_file(mem_ctx, "torture.tdb", 0, 0, O_RDWR|O_CREAT, 0644);
+       if (db == NULL) {
+               DEBUG(0, ("db_open_file failed: %s\n", strerror(errno)));
+               talloc_free(mem_ctx);
+               return False;
+       }
+
+       for (i=0; i<torture_numops; i++) {
+               TDB_DATA key, data;
+               struct db_record *rec;
+
+               key.dsize = 1 + (rand() % KEYLEN);
+               key.dptr = randbuf(key.dsize);
+               data.dsize = 1 + (rand() % DATALEN);
+               data.dptr = randbuf(data.dsize);
+
+               rec = db->fetch_locked(db, mem_ctx, key);
+               if (rec == NULL) {
+                       DEBUG(0, ("could not fetch %s\n", key.dptr));
+                       return False;
+               }
+               rec->store(rec, data, 0);
+               talloc_free(rec);
+
+               free(key.dptr);
+               free(data.dptr);
+       }
+
+       talloc_free(mem_ctx);
        return True;
 }
 

Reply via email to