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;
}
Example #2
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);
}