void do_bench(struct nessdb *db, struct random *rnd, uint32_t loop) { uint32_t i; int done = 0;; int next_report = 100; char kbuf[KEY_SIZE]; for (i = 0; i < loop; i++) { uint32_t krnd = rnd_next(rnd); snprintf(kbuf, KEY_SIZE, "%016d", krnd); char *vbuf = rnd_str(rnd, VAL_SIZE); struct msg k = {.data = kbuf, .size = KEY_SIZE}; struct msg v = {.data = vbuf, .size = VAL_SIZE}; db_set(db, &k, &v); done++; if (done >= next_report) { if (next_report < 1000) next_report += 100; else if (next_report < 5000) next_report += 500; else if (next_report < 10000) next_report += 1000; else if (next_report < 50000) next_report += 5000; else if (next_report < 100000) next_report += 10000; else if (next_report < 500000) next_report += 50000; else next_report += 100000; fprintf(stderr, "random write finished %d ops%30s\r", done, ""); fflush(stderr); } } }
void dbwrite(char *name, int random) { LOG; uint32_t i; int done = 0;; int next_report = 100; char kbuf[KEY_SIZE]; for (i = 0; i < FLAGS_num; i++) { printf("current_%d\n", i); char *vbuf; int key = random ? rand() : i; printf("%016d\n", key); memset(kbuf, 0, KEY_SIZE); snprintf(kbuf, KEY_SIZE, "%016d", key); printf("%s\n", kbuf); vbuf = rnd_str(rnd, VAL_SIZE); struct msg k = {.data = kbuf, .size = strlen(kbuf)}; struct msg v = {.data = vbuf, .size = VAL_SIZE}; if (db_set(db, &k, &v) != NESS_OK) { fprintf(stderr, " set error\n"); } done++; if (done >= next_report) { if (next_report < 1000) next_report += 100; else if (next_report < 5000) next_report += 500; else if (next_report < 10000) next_report += 1000; else if (next_report < 50000) next_report += 5000; else if (next_report < 100000) next_report += 10000; else if (next_report < 500000) next_report += 50000; else next_report += 100000; fprintf(stderr, "%s finished %d ops%30s\r", name, done, ""); fflush(stderr); } } }
void dbwrite(char *name, int random) { uint32_t i; int done = 0;; int next_report = 100; char kbuf[KEY_SIZE]; for (i = 0; i < FLAGS_num; i++) { char *vbuf; int key = random ? rnd_next(rnd) % FLAGS_num : i; memset(kbuf, 0, KEY_SIZE); snprintf(kbuf, KEY_SIZE, "%016d", key); vbuf = rnd_str(rnd, VAL_SIZE); if (ness_db_set(db, kbuf, strlen(kbuf), vbuf, VAL_SIZE) != NESS_OK) { fprintf(stderr, " set error\n"); } done++; if (done >= next_report) { if (next_report < 1000) next_report += 100; else if (next_report < 5000) next_report += 500; else if (next_report < 10000) next_report += 1000; else if (next_report < 50000) next_report += 5000; else if (next_report < 100000) next_report += 10000; else if (next_report < 500000) next_report += 50000; else next_report += 100000; fprintf(stderr, "%s finished %d ops%30s\r", name, done, ""); fflush(stderr); } } }
void test_fcalls(CuTest *tc) { int rc; struct login_t login; char fpath[][5 + LEN_RND_STR + 1] = {"/tmp/", "/tmp/", "/tmp/", "/tmp/"}; for (uint8_t r = 0; r < sizeof(fpath)/sizeof(fpath[0]); r++) { char rnd_s[LEN_RND_STR + 1] = {0}; rnd_str(rnd_s, LEN_RND_STR); snprintf(fpath[r] + 5, LEN_RND_STR + 1, "%s", rnd_s); } login_fill(&login, SERVERNAME, NODE, PASSWORD, OWNER, LINUX_PLATFORM, DEFAULT_FSNAME, DEFAULT_FSTYPE); struct session_t session; memset(&session, 0, sizeof(struct session_t)); rc = tsm_init(DSM_SINGLETHREAD); CuAssertIntEquals(tc, DSM_RC_SUCCESSFUL, rc); rc = tsm_fconnect(&login, &session); CuAssertIntEquals(tc, DSM_RC_SUCCESSFUL, rc); srand(time(NULL)); FILE *file = NULL; for (uint8_t r = 0; r < sizeof(fpath)/sizeof(fpath[0]); r++) { unlink(fpath[r]); file = fopen(fpath[r], "w+"); CuAssertPtrNotNull(tc, file); rc = tsm_fopen(DEFAULT_FSNAME, fpath[r], "written by cutest", &session); CuAssertIntEquals(tc, DSM_RC_SUCCESSFUL, rc); unsigned char *buf = NULL; for (uint8_t b = 0; b < 16; b++) { size_t buf_size = 1 + (rand() % 1048576); /* 2^20 = 1 MiB */ buf = calloc(buf_size, sizeof(unsigned char)); CuAssertPtrNotNull(tc, buf); for (size_t r = 0; r < buf_size; r++) buf[r] = rand() % 256; size_t written = 0; size_t total_written = 0; size_t rand_nmemb; size_t to_write = buf_size; size_t written_tsm = 0; size_t total_written_tsm = 0; do { rand_nmemb = 1 + (rand() % buf_size); written = fwrite(buf, 1, rand_nmemb, file); total_written += written; written_tsm = tsm_fwrite(buf, 1, rand_nmemb, &session); total_written_tsm += written_tsm; buf_size -= rand_nmemb; } while (buf_size != 0 || written == 0); CuAssertIntEquals(tc, to_write, total_written); CuAssertIntEquals(tc, to_write, total_written_tsm); free(buf); } fclose(file); file = NULL; uint32_t crc32sum = 0; rc = crc32file(fpath[r], &crc32sum); CuAssertIntEquals(tc, 0, rc); CuAssertIntEquals(tc, crc32sum , session.tsm_file->archive_info.obj_info.crc32); rc = tsm_fclose(&session); CuAssertIntEquals(tc, DSM_RC_SUCCESSFUL, rc); rc = tsm_delete_fpath(DEFAULT_FSNAME, fpath[r], &session); CuAssertIntEquals(tc, DSM_RC_SUCCESSFUL, rc); } tsm_fdisconnect(&session); tsm_cleanup(DSM_SINGLETHREAD); }