summaryrefslogtreecommitdiff
path: root/innobase/mtr/ts/tsmtr.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/mtr/ts/tsmtr.c')
-rw-r--r--innobase/mtr/ts/tsmtr.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/innobase/mtr/ts/tsmtr.c b/innobase/mtr/ts/tsmtr.c
new file mode 100644
index 00000000000..42997cd2699
--- /dev/null
+++ b/innobase/mtr/ts/tsmtr.c
@@ -0,0 +1,158 @@
+/************************************************************************
+The test module for the mini-transaction utilities
+
+(c) 1995 Innobase Oy
+
+Created 11/26/1995 Heikki Tuuri
+*************************************************************************/
+
+#include "sync0sync.h"
+#include "sync0rw.h"
+#include "mem0mem.h"
+#include "log0log.h"
+#include "..\mtr0mtr.h"
+#include "..\mtr0log.h"
+
+rw_lock_t rwl[MTR_BUF_MEMO_SIZE];
+
+/*********************************************************************
+Test for mtr buffer */
+
+void
+test1(void)
+/*=======*/
+{
+ ulint i;
+ mtr_t mtr;
+
+ printf("-------------------------------------------\n");
+ printf("MTR-TEST 1. Test of mtr buffer\n");
+
+ mtr_start(&mtr);
+
+ for (i = 0; i < MTR_BUF_MEMO_SIZE; i++) {
+ rw_lock_create(rwl + i);
+ }
+
+ for (i = 0; i < MTR_BUF_MEMO_SIZE; i++) {
+ rw_lock_s_lock(rwl + i);
+ mtr_memo_push(&mtr, rwl + i, MTR_MEMO_S_LOCK);
+ }
+
+ mtr_commit(&mtr);
+
+ rw_lock_list_print_info();
+ ut_ad(rw_lock_n_locked() == 0);
+
+}
+
+/************************************************************************
+Speed test function. */
+void
+speed_mtr(void)
+/*===========*/
+{
+ mtr_t mtr;
+
+ mtr_start(&mtr);
+
+ mtr_s_lock(rwl, &mtr);
+ mtr_s_lock(rwl + 1, &mtr);
+ mtr_s_lock(rwl + 2, &mtr);
+
+ mtr_commit(&mtr);
+}
+
+/************************************************************************
+Speed test function without mtr. */
+void
+speed_no_mtr(void)
+/*===========*/
+{
+ rw_lock_s_lock(rwl);
+ rw_lock_s_lock(rwl + 1);
+ rw_lock_s_lock(rwl + 2);
+ rw_lock_s_unlock(rwl + 2);
+ rw_lock_s_unlock(rwl + 1);
+ rw_lock_s_unlock(rwl);
+}
+
+/************************************************************************
+Speed test function. */
+
+void
+test2(void)
+/*======*/
+{
+ ulint tm, oldtm;
+ ulint i, j;
+ mtr_t mtr;
+ byte buf[50];
+
+ oldtm = ut_clock();
+
+ for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {
+ speed_mtr();
+ }
+
+ tm = ut_clock();
+ printf("Wall clock time for %lu mtrs %lu milliseconds\n",
+ i, tm - oldtm);
+ oldtm = ut_clock();
+
+ for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {
+ speed_no_mtr();
+ }
+
+ tm = ut_clock();
+ printf("Wall clock time for %lu no-mtrs %lu milliseconds\n",
+ i, tm - oldtm);
+
+ oldtm = ut_clock();
+ for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {
+ mtr_start(&mtr);
+ for (j = 0; j < 250; j++) {
+ mlog_catenate_ulint(&mtr, 5, MLOG_1BYTE);
+ mlog_catenate_ulint(&mtr, i, MLOG_4BYTES);
+ mlog_catenate_ulint(&mtr, i + 1, MLOG_4BYTES);
+ mlog_catenate_string(&mtr, buf, 50);
+ }
+ mtr_commit(&mtr);
+ }
+ tm = ut_clock();
+ printf("Wall clock time for %lu log writes %lu milliseconds\n",
+ i * j, tm - oldtm);
+ mtr_start(&mtr);
+ for (j = 0; j < 250; j++) {
+ mlog_catenate_ulint(&mtr, 5, MLOG_1BYTE);
+ mlog_catenate_ulint(&mtr, i, MLOG_4BYTES);
+ mlog_catenate_ulint(&mtr, i + 1, MLOG_4BYTES);
+ mlog_catenate_string(&mtr, buf, 50);
+ }
+
+ mtr_print(&mtr);
+ mtr_commit(&mtr);
+}
+
+/************************************************************************
+Main test function. */
+
+void
+main(void)
+/*======*/
+{
+ ulint tm, oldtm;
+
+ oldtm = ut_clock();
+
+ sync_init();
+ mem_init();
+ log_init();
+
+ test1();
+ test2();
+
+ tm = ut_clock();
+ printf("Wall clock time for test %lu milliseconds\n", tm - oldtm);
+ printf("TESTS COMPLETED SUCCESSFULLY!\n");
+}