static void 
test_hlfs_open_by_inode(Fixture *fixture, const void *data) {
	g_message("enter func %s", __func__);
	//const char *uri = (const char *)data;
	hlfs_close(fixture->ctrl);
	int ret = hlfs_open_by_inode(fixture->ctrl, fixture->inode_addr1, 0);
	g_message("ret is %d", ret);
	g_assert(ret == 0);
	g_message("inode_addr [%llu], inode mtime [%llu], rw_inode_flag [%d]",
			fixture->ctrl->imap_entry.inode_addr,
			fixture->ctrl->inode.mtime,
			fixture->ctrl->rw_inode_flag);
	hlfs_close(fixture->ctrl);
	ret = hlfs_open_by_inode(fixture->ctrl, fixture->inode_addr2, 1);
	g_assert(ret == 0);
	g_message("inode_addr [%llu], inode mtime [%llu], rw_inode_flag [%d]",
			fixture->ctrl->imap_entry.inode_addr,
			fixture->ctrl->inode.mtime,
			fixture->ctrl->rw_inode_flag);
	hlfs_close(fixture->ctrl);
	ret = hlfs_open_by_inode(fixture->ctrl, fixture->inode_addr3, 1);
	g_assert(ret == 0);
	g_message("inode_addr [%llu], inode mtime [%llu], rw_inode_flag [%d]",
			fixture->ctrl->imap_entry.inode_addr,
			fixture->ctrl->inode.mtime,
			fixture->ctrl->rw_inode_flag);
	g_message("leave func %s", __func__);
}
Example #2
0
void case_teardown()
{
	int ret = 0;
	g_message("going out...");
	ret = hlfs_close(fixture.ctrl); 
	struct stat *_stat = (struct stat *)g_malloc0(sizeof(struct stat));
	ret = stat("/tmp/testenv/testfs/0.seg", _stat);
	g_assert(ret == 0);
	g_message("size of 0.seg:%d", _stat->st_size);
	g_message("inode of 0.seg:%d", _stat->st_ino);
	g_message("atime of 0.seg:%d", _stat->st_atime);
		//sleep(1);
	ret = deinit_hlfs(fixture.ctrl);
	system("rm -rf /tmp/testenv");
	system("rm ./hlfsrc");
	g_assert(ret == 0);
}
static void 
hlfs_get_all_snapshots_tear_down(Fixture *fixture, const void *data) {
	const char *test_dir = (const char *) data;
	g_print("clean dir path: %s\n", test_dir);
	char *fs_dir = g_build_filename(test_dir, "testfs", NULL);
#if 0
	pid_t status;
	const char cmd[256];
	memset((char *) cmd, 0, 256);
	sprintf((char *) cmd, "%s %s %s", "rm", "-r", fs_dir);
	g_message("cmd is [%s]", cmd);
	status = system(cmd);

	struct back_storage *storage = init_storage_handler(fixture->uri);
	g_assert(storage != NULL);
	int nums = 0;
	bs_file_info_t *infos = storage->bs_file_list_dir(storage, ".", &nums);
	g_assert(infos != NULL);
	bs_file_info_t *info = infos;
	int i = 0;
	g_message("nums is %d", nums);
	for (i = 0; i < nums; i++) {
		g_message("info name is %s", info->name);
		char *tmp_file = g_build_filename(fs_dir, info->name, NULL);
		g_message("tmp file name is [%s]", tmp_file);
		g_assert(g_remove(tmp_file) == 0);
		g_free(tmp_file);
		info += 1;
	}
	//	char *sb_file = g_build_filename(fs_dir, "superblock", NULL);
	//	g_assert(g_remove(sb_file) == 0);
	g_assert(g_remove(fs_dir) == 0);
	g_free(fixture->uri);
	g_free(fs_dir);
	//	g_free(sb_file);
	g_free(storage);
	g_free(infos);
#endif
	g_free(fs_dir);
	g_free(fixture->uri);
	hlfs_close(fixture->ctrl);
	deinit_hlfs(fixture->ctrl);
	return;
}
Example #4
0
void case_setup()
{
#if 1
	system("rm -rf /tmp/testenv");
	system("mkdir /tmp/testenv -p");
	system("cd ../../../ && ./output/bin/mkfs.hlfs -u \
			local:///tmp/testenv/testfs -b 8192 -s 67108864 -m 1024");
	system("cd -");
	char *uri = "local:///tmp/testenv/testfs";
	fixture.hctrl = init_hlfs(uri);
	g_assert(NULL != fixture.hctrl);
	int ret = 0;
	ret = hlfs_open(fixture.hctrl,1);
	g_assert(ret == 0);
	g_print("TEST  hlfs open over \n");
	int i = 0;
	int offset = 0;
	int BATCHSIZE = 8192;
	char content[BATCHSIZE];
	for (i = 0;i < 8192 * 3;i++) {
		hlfs_write(fixture.hctrl, content, BATCHSIZE, offset);
		offset = offset + BATCHSIZE;
		if (offset == 8192 * 8192) {
			ret = hlfs_take_snapshot(fixture.hctrl, "test_snapshot1");  
			g_assert(ret == 0);
			g_print("take snapshot 1\n");
		}

		if (offset == 8192 * 8192 * 2) {
			ret = hlfs_take_snapshot(fixture.hctrl, "test_snapshot2");  
			g_assert(ret == 0);
			g_print("take snapshot 2\n");
		}

		if (offset == 8192 * 8192 * 2 + 8192 * 1) {
			ret = hlfs_take_snapshot(fixture.hctrl, "test_snapshot3");  
			g_assert(ret == 0);
			g_print("take snapshot 3\n");
		}
	}
	hlfs_close(fixture.hctrl);
	deinit_hlfs(fixture.hctrl);
#endif 
}
Example #5
0
/*
 * ./test -u uri -r request_size -a total_size
 * uri: /tmp/testenv/testfs
 * request_size: 4096bytes
 * total_size: 409600bytes
 */
int main(int argc, char *argv[]){
    if (log4c_init()) {
        g_message("log4c_init error!");
    }
    GError *error = NULL;
    GOptionContext *context;
    context = g_option_context_new("- hlfs test -");
    g_option_context_add_main_entries(context, entries, NULL);
    g_option_context_set_help_enabled(context, TRUE);
    g_option_group_set_error_hook(g_option_context_get_main_group(context),
            (GOptionErrorFunc)error_func);
    if (!g_option_context_parse(context, &argc, &argv, &error)) {
        g_message("option parsing failed: %s", error->message);
        exit(EXIT_FAILURE);
    }
	g_option_context_free(context);
    g_print("TEST: uri is %s, request size is %d, total size is %d\n", uri, request_size, total_size);
    char *content = (char*)g_malloc0(request_size);
    HLFS_CTRL * ctrl = init_hlfs(uri);
    g_assert(ctrl != NULL);
    uint64_t ret = 0;
    ret = hlfs_open(ctrl,1);
    g_assert(ret == 0);
    g_print("TEST  hlfs open over \n");
	g_print("test hlfs write\n");
	sleep(2);
    int offset = 0;
    while(offset < total_size){
        ret = hlfs_write(ctrl,content,request_size,offset);
        g_assert(ret==request_size);
        offset +=request_size;
        printf("offset:%d\n",offset);
    }
    g_print("TEST  hlfs write over \n");
	g_print("test hlfs read\n");
	sleep(2);
    offset = 0;
    while(offset < total_size){
        ret = hlfs_read(ctrl,content,request_size,offset);
        g_assert(ret==request_size);
        offset +=request_size;
        printf("offset:%d\n",offset);
    }

	g_print("again ------------------------\n");
    offset = 0;
/******************************************************************************************************************************************/



	int fdd;
	int len;
	int rett;
	int i;
	//char read_buf[409600];
	char *contentt = (char*)g_malloc0(40960);

	if((fdd = open("test.c", O_RDONLY )) == -1){
	my_err("open", __LINE__);
	} else {
		g_print("Open file success\n");
	}

	//if(write(fd, write_buf, strlen(write_buf)) != strlen(write_buf)){
	//	my_err("write", __LINE__);
	//}


	if(lseek(fdd, 0, SEEK_END) == -1){
	my_err("lseek", __LINE__);
	}
	if((len = lseek(fdd, 0, SEEK_CUR)) == -1){
		my_err("lseek", __LINE__);
	}
	if((lseek(fdd, 0, SEEK_SET)) == -1){
		my_err("lseek", __LINE__);
	}

	printf("len: %d\n", len);
	if((rett = read(fdd, contentt, len)) < 0){
		my_err("lseek",__LINE__);
	}
	strcpy(content, contentt);
	//for(i = 0; i< len; i ++){
	g_print("%s ", contentt);
	//}
	g_print("\n");


	g_print("/************************************************/");
	if(lseek(fdd, 10, SEEK_END) == -1){
		my_err("lseek", __LINE__);
	}
	
	
	//close (fdd);
/****************************************************************************************************/
 //FILE* srcFile = NULL;

	int srcLength =  lseek(fdd, 0, SEEK_CUR);
	int SNAPPY_OK = 0;
	char* pSrcBuffer =  (char*)g_malloc0(srcLength);
	read(fdd, pSrcBuffer, srcLength);
 	size_t cbOfCompressed = 32+ srcLength + srcLength/6;
  	char* pCompressedBuffer =  (char*)g_malloc0(cbOfCompressed); 
  	if (snappy_compress(pSrcBuffer, srcLength, pCompressedBuffer, &cbOfCompressed) == SNAPPY_OK)
  {
  	 free(pSrcBuffer);
   	pSrcBuffer = NULL;

   	if (snappy_validate_compressed_buffer(pCompressedBuffer, cbOfCompressed) == SNAPPY_OK)
   {
    	size_t cbDecompress = 0;
    	snappy_uncompressed_length(pCompressedBuffer, cbOfCompressed, &cbDecompress);

    	assert(cbDecompress == srcLength);

    	char* pDecompressedBuffer = (char*)g_malloc0(cbDecompress);
    	snappy_uncompress(pCompressedBuffer, cbOfCompressed, pDecompressedBuffer, (size_t*)&cbDecompress);

    	int file;
    	file = open("test1.txt", O_CREAT | O_RDWR );
    //_wfopen_s(&file, _T("123.pdf"), _T("ab"));
	write(file, pDecompressedBuffer, cbDecompress);
    	close(file);

    	free(pDecompressedBuffer);
    	pDecompressedBuffer = NULL;
   }
  }
 

	close (fdd);


/******************************************************************************************************************************************/
 //   while(offset < total_size){
 //       ret = hlfs_write(ctrl,content,request_size,offset);
  //      g_assert(ret==request_size);
  //      offset +=request_size;
  //      printf("offset:%d\n",offset);
  //  }
  //  g_print("TEST  hlfs write over \n");
//	g_print("test hlfs read\n");
//	sleep(2);
  // offset = 0;
   while(offset < len+1){
        ret = hlfs_read(ctrl,content,len,offset);
        g_assert(ret==len);
        offset +=len;
        printf("offset:%d\n",offset);
    }

	g_free(content);
	g_free(contentt);
	ret = hlfs_close(ctrl);
	deinit_hlfs(ctrl);
	g_print("TEST  hlfs test over \n");
	return 0;
}
Example #6
0
/*  seg.clean -u uri -s segno -w copy_water -v verbose */
int main(int argc, char *argv[])
{
    GError *error = NULL;
    GOptionContext *context;
    context = g_option_context_new("- segment clearn...");
    g_option_context_add_main_entries(context, entries, NULL);
    g_option_context_set_help_enabled(context, TRUE);
    g_option_group_set_error_hook(g_option_context_get_main_group(context),
                                  (GOptionErrorFunc)error_func);
    if (!g_option_context_parse(context, &argc, &argv, &error)) {
        g_message("option parsing failed: %s", error->message);
        exit(EXIT_FAILURE);
    }

    g_message("uri is :%s",uri);
    g_message("start segno:%d,end segno:%d",start_segno,end_segno);
    g_message("copy_waterlevel is: %d",copy_waterlevel);

    g_option_context_free(context);
    HLFS_CTRL * ctrl = init_hlfs(uri);
    g_assert(ctrl != NULL);
    g_message("ctrl init over");
    int ret = 0;
    ret = hlfs_open(ctrl,1);
    g_message("ctrl open over");
    g_assert(ret == 0);
    if(0!=ctrl->storage->bs_file_is_exist(ctrl->storage,SEGMENTS_USAGE_FILE)) {
        g_message("seg usage file not exit");
        goto OUT;
    }
    GHashTable *seg_usage_hashtable = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,NULL);//TODO
    GList* seg_usage_list = NULL;
    ret = load_all_seg_usage(ctrl->storage,SEGMENTS_USAGE_FILE,seg_usage_hashtable);
    g_assert(ret == 0);
    ret = sort_all_seg_usage(seg_usage_hashtable,&seg_usage_list);
    g_assert(ret == 0);
    int i;
    for(i=start_segno; i<=end_segno; i++) {
        SEG_USAGE_T *seg_usage = g_hash_table_lookup(seg_usage_hashtable,GINT_TO_POINTER((uint32_t)i));
        char segfile[128];
        build_segfile_name(i, segfile);
        if(seg_usage != NULL) {
            g_message("seg no:%d ...",seg_usage->segno);
            if (seg_usage->alive_block_num == 0) {
                g_message("seg no:%d no alive block now,delete it",i);
                if(0 == ctrl->storage->bs_file_is_exist(ctrl->storage,segfile)) {
                    ret = ctrl->storage->bs_file_delete(ctrl->storage,segfile);
                    g_assert(ret == 0);
                } else {
                    g_message("seg no:%d has delete",i);
                }
                continue;
            }
            if(0 == strcmp(seg_usage->up_sname,EMPTY_UP_SNAPSHOT)) {
                g_message("seg no:%d is maybe need to migrate",seg_usage->segno);
                if (seg_usage->alive_block_num > copy_waterlevel) {
                    g_message("seg no:%d is need to migrate",seg_usage->segno);
                    ret = migrate_alive_blocks(ctrl,seg_usage);
                    g_assert(ret == 0);
                    seg_usage->alive_block_num =0;
                    seg_usage->timestamp = get_current_time();
                    memset(seg_usage->bitmap,0,(seg_usage->log_num-1)/sizeof(gint)+1);
                    ret = dump_seg_usage(ctrl->storage,SEGMENTS_USAGE_FILE,seg_usage);
                    g_free(seg_usage->bitmap);
                    g_free(seg_usage);
                    ret = ctrl->storage->bs_file_delete(ctrl->storage,segfile);
                }
            }
        } else {
            g_message("seg no:%d has not yet do seg usage calc",i);
        }
    }
OUT:
    ret = hlfs_close(ctrl);
    g_assert(ret == 0);
    ret = deinit_hlfs(ctrl);
    g_assert(ret ==0);
    return 0;
}