Database *database_create (const DatabaseType *type, const char *file, unsigned flags) { Database *D = database_alloc(type); D->filename = strdup(file); D->flags = flags; IdToNode nodes; ndict_init(&nodes); if (!load_data(D, &nodes)) goto error; fix_pointers(D, &nodes); ndict_destroy(&nodes); fill_indexes(D); if (pthread_create(&D->service_thread, 0, (void*(*)(void*))service_thread, (void*)D)) goto error; database_set_sync_period(D, DB_SYNC_PERIOD); return D; error: dbDebug(E, "Database creation failed"); return 0; }
void run_test(Estimator *estimator) { setvbuf(stdout, NULL, _IONBF, 0); long file_size = PAGE_SIZE * estimator->num_of_pages; long long *offsets = malloc(estimator->num_of_pages * sizeof(long long)); fill_indexes(offsets, estimator->num_of_pages); printf("NUM_OF_PAGES: %ld\n", estimator->num_of_pages); printf("FILE_SIZE: %ld\n", file_size); printf("PAGE_SIZE: %i\n", PAGE_SIZE); shuffle(offsets, estimator->num_of_pages); preallocate_test_file(estimator->file_name, file_size); int fd, retval; fd = open(estimator->file_name, O_RDONLY); handle("open file", fd < 0); struct timeval tv1, tv2; gettimeofday(&tv1, NULL); estimator->strategy(fd, estimator->num_of_pages, offsets); gettimeofday(&tv2, NULL); double seq_time = (double) (tv2.tv_usec - tv1.tv_usec) / 1000000 + (double) (tv2.tv_sec - tv1.tv_sec); estimator->elapsed_time = seq_time; free(offsets); }