int main(int argc, char *argv[]) { struct list list; char *store_name = "kvstore.db"; unsigned long rec_num, rec_size; int rval; pthread_t ptid; if (argc != 5) { printf("Argument error! ./main test_type record_num record_size kv_type\n"); return 0; } rec_num = (unsigned long)atoi(argv[2]); if (rec_num <= 0 ) { printf("[POS] record num argument error!\n"); return 0; } rec_num *= 10000; rec_size = atoi(argv[3]); if (rec_size <= 0 ) { printf("[BDB] record size argument error!\n"); return 0; } if (strcmp(argv[4], "btree") == 0) { kv_type = BTREE; } else if (strcmp(argv[4], "hash") == 0) { kv_type = HASH; } else { printf("[BDB] KV type argument error!\n"); return 0; } /*if (strcmp(argv[5], "1") == 0) { log_flag = 1; } else if (strcmp(argv[5], "0") == 0) { log_flag = 0; } else { printf("[BDB] Log argument error!\n"); return 0; }*/ if (init_experiment(store_name) != 1) { printf("[BDB] init_experiment() fail!\n"); return 0; } if (strcmp(argv[1], "insert") == 0) { rval = list_from_file(&list, rec_num, "workload_insert.txt"); if (rval != rec_num) { printf("list_from_file() error!\n"); return 0; } printf("[BDB] Insert Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, INSERT); delete_list(&list); } else if (strcmp(argv[1], "lookup") == 0) { rval = list_from_file(&list, rec_num, "workload_insert.txt"); if (rval != rec_num) { printf("list_from_file() error!\n"); return 0; } printf("[BDB] Lookup Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, LOOKUP); if (rval != rec_num) { printf("error!\n"); return 0; } delete_list(&list); } else if (strcmp(argv[1], "delete") == 0) { rval = list_from_file(&list, rec_num, "workload_insert.txt"); if (rval != rec_num) { printf("list_from_file() error!\n"); return 0; } printf("[BDB] Delete Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, DELETE); if (rval != rec_num) { printf("error!\n"); return 0; } delete_list(&list); } else if (strcmp(argv[1], "update") == 0) { rec_num += rec_num/FREQ_NUM; rval = list_from_file(&list, rec_num, "workload_update.txt"); if (rval != rec_num) { printf("list_from_file() error!\n"); return 0; } printf("[BDB] Update Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, UPDATE); if (rval != rec_num) { printf("error!\n"); return 0; } delete_list(&list); } else { printf("[BDB] type error!\n"); } if (terminate_experiment(store_name) != 1) { printf("[BDB] terminate_experiment() fail!\n"); return 0; } //system("rm /mnt/kvstore.db"); return 0; }
int main(int argc, char *argv[]) { struct list list; unsigned long rec_num, rec_size; int rval; if (argc != 6) { printf("Argument error! ./main obj_store record_num record_size kv_type TEST_TYPE\n"); return 0; } //store_name = argv[6] ; //store_name = argv[6]; char * store_name ; store_name = argv[1] ; printf("===============================\n") ; printf("store_name : %s\n" , store_name) ; rec_num = (unsigned long)atoi(argv[2]); printf("rec_num :%d\n" , rec_num) ; if (rec_num <= 0 ) { printf("[POS] record num argument error!\n"); return 0; } rec_num *= 10000; rec_size = atoi(argv[3]); printf("rec_size : %d\n" ,rec_size ) ; printf("==============================\n") ; if (rec_size <= 0 ) { printf("[POS] record size argument error!\n"); return 0; } value = (unsigned long *)malloc(rec_size); func_ptr = (struct function_ptr *)malloc(sizeof(struct function_ptr)); if (strcmp(argv[4], "btree") == 0) { kv_type = BTREE; func_ptr->open_func = stm_pos_btree_open; func_ptr->close_func = stm_pos_btree_close; func_ptr->insert_func = stm_pos_btree_insert; func_ptr->lookup_func = pos_btree_lookup; func_ptr->remove_func = stm_pos_btree_remove; } else if (strcmp(argv[4], "hash") == 0) { kv_type = HASH; func_ptr->open_func = stm_pos_hashtable_open; func_ptr->close_func = stm_pos_hashtable_close; func_ptr->insert_func = stm_pos_hashtable_insert; func_ptr->lookup_func = pos_hashtable_search; func_ptr->remove_func = stm_pos_hashtable_remove; } else if (strcmp(argv[4], "list") == 0) { printf("LIST\n") ; kv_type = LIST; func_ptr->open_func = stm_pos_list_open; func_ptr->close_func = stm_pos_list_close; func_ptr->insert_func = stm_pos_list_insert; func_ptr->lookup_func = pos_list_lookup; func_ptr->remove_func = stm_pos_list_remove; } else { printf("[POS] KV type argument error!\n"); return 0; } /* pos_stm_init_xxx , pos_stm_open_xxx */ printf("===init===\n") ; if (init_experiment(store_name, rec_num) != 1) { printf("[POS] init_experiment() fail!\n"); return 0; } printf("===end===\n\n") ; //if (func_ptr->open_func(store_name) != 0) { // printf("[POS] pos_open() fail\n"); // return 0; //} if (strcmp(argv[5], "insert") == 0 ){ rval = list_from_file(&list ,rec_num , "workload_insert.txt") ; if( rval != rec_num ){ printf("list_from_file() error\n"); return 0 ; } printf("[POS] Insert Experiment\n") ; rval = do_experiment(&list , store_name , rec_num , rec_size ,INSERT) ; }else if(strcmp(argv[5], "update") == 0){ rval = list_from_file(&list ,rec_num , "workload_insert.txt") ; if( rval != rec_num ){ printf("list_from_file() error\n"); return 0 ; } }else if(strcmp(argv[5] , "delete") == 0){ rval = list_from_file(&list ,rec_num , "workload_insert.txt") ; if( rval != rec_num ){ printf("list_from_file() error\n"); return 0 ; } printf("[POS] Delete Experiment\n") ; rval = do_experiment(&list , store_name , rec_num , rec_size ,DELETE) ; } else if (strcmp(argv[5], "separate") == 0) { rval = list_from_file(&list, rec_num, "workload_insert.txt"); if (rval != rec_num) { printf("list_from_file() error!\n"); return 0; } printf("[POS] Insert Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, INSERT); printf("[POS] Lookup Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, LOOKUP); printf("[POS] Delete Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, DELETE); delete_list(&list); } else if (strcmp(argv[1], "update") == 0) { rec_num += rec_num/FREQ_NUM; rval = list_from_file(&list, rec_num, "workload_update.txt"); if (rval != rec_num) { printf("list_from_file() error!\n"); return 0; } printf("[POS] Update Experiment\n"); rval = do_experiment(&list, store_name, rec_num, rec_size, UPDATE); delete_list(&list); } //func_ptr->close_func(store_name); free(value); free(func_ptr); if (terminate_experiment(store_name) != 1) { printf("[POS] terminate_experiment() fail!\n"); return 0; } return 0; }