summaryrefslogtreecommitdiffstats
path: root/ctdb/tests/src
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2010-12-21 15:29:46 +0100
committerMichael Adam <obnox@samba.org>2011-03-14 13:35:50 +0100
commit670330b331366e533f187f4947a71f2985b1ca91 (patch)
tree408392d2b589321f37380f592a39f1f5bcb299c0 /ctdb/tests/src
parenta6b13b21c1e52ad49b2629d2610bef59858b9fd9 (diff)
downloadsamba-670330b331366e533f187f4947a71f2985b1ca91.tar.gz
samba-670330b331366e533f187f4947a71f2985b1ca91.tar.xz
samba-670330b331366e533f187f4947a71f2985b1ca91.zip
test: send SCHEDULE_FOR_DELETION control from randrec test.
(This used to be ctdb commit 30aa55b3efc6fbd4078f93da386b6aeb337c1a0c)
Diffstat (limited to 'ctdb/tests/src')
-rw-r--r--ctdb/tests/src/ctdb_randrec.c43
1 files changed, 42 insertions, 1 deletions
diff --git a/ctdb/tests/src/ctdb_randrec.c b/ctdb/tests/src/ctdb_randrec.c
index 3a2622b4d8..5b7eef83d2 100644
--- a/ctdb/tests/src/ctdb_randrec.c
+++ b/ctdb/tests/src/ctdb_randrec.c
@@ -23,6 +23,7 @@
#include "system/filesys.h"
#include "popt.h"
#include "cmdline.h"
+#include "ctdb_private.h"
#include <sys/time.h>
#include <time.h>
@@ -83,10 +84,50 @@ static void store_records(struct ctdb_context *ctdb, struct event_context *ev)
}
ret = ctdb_record_store(h, data);
- talloc_free(h);
if (ret != 0) {
printf("Failed to store record\n");
}
+
+ if (data.dptr == NULL && data.dsize == 0) {
+ struct ctdb_control_schedule_for_deletion *dd;
+ TDB_DATA indata;
+ int32_t status;
+
+ indata.dsize = offsetof(struct ctdb_control_schedule_for_deletion, key) + key.dsize;
+ indata.dptr = talloc_zero_array(ctdb, uint8_t, indata.dsize);
+ if (indata.dptr == NULL) {
+ printf("out of memory\n");
+ exit(1);
+ }
+ dd = (struct ctdb_control_schedule_for_deletion *)(void *)indata.dptr;
+ dd->db_id = ctdb_db->db_id;
+ dd->hdr = *ctdb_header_from_record_handle(h);
+ dd->keylen = key.dsize;
+ memcpy(dd->key, key.dptr, key.dsize);
+
+ ret = ctdb_control(ctdb,
+ CTDB_CURRENT_NODE,
+ ctdb_db->db_id,
+ CTDB_CONTROL_SCHEDULE_FOR_DELETION,
+ 0, /* flags */
+ indata,
+ NULL, /* mem_ctx */
+ NULL, /* outdata */
+ &status,
+ NULL, /* timeout : NULL == wait forever */
+ NULL); /* error message */
+
+ talloc_free(indata.dptr);
+
+ if (ret != 0 || status != 0) {
+ DEBUG(DEBUG_ERR, (__location__ " Error sending "
+ "SCHEDULE_FOR_DELETION "
+ "control.\n"));
+ }
+ }
+
+ talloc_free(h);
+
if (i % 1000 == 0) {
printf("%7.0f recs/second %u total\r", 1000.0 / end_timer(), i);
fflush(stdout);