/* write trigger wb*/ void test_seg_usage_text() { int ret = 0; SEG_USAGE_T seg_usage; seg_usage.segno = 10; strncpy(seg_usage.up_sname,"test_snapshot",strlen("test_snapshot")); seg_usage.block_num = 64; seg_usage.inode_addr = 10101010; seg_usage.log_num = 8; seg_usage.timestamp = get_current_time(); seg_usage.alive_block_num = 10; seg_usage.bitmap = g_malloc0((seg_usage.log_num-1)/sizeof(gint)+1); int i,idx; i = 0;idx = i/sizeof(gint); seg_usage.bitmap[idx] |= 1<<0%sizeof(gint); i = 2;idx = i/sizeof(gint); seg_usage.bitmap[idx] |= 1<<2%sizeof(gint); i = 7;idx = i/sizeof(gint); i = 0;idx = i/sizeof(gint); seg_usage.bitmap[idx] |= 1<<7%sizeof(gint); char textbuf[4096]; memset(textbuf,4096,0); ret = seg_usage2text(&seg_usage,textbuf); g_assert(ret > 0); printf("textbuf is :%s\n",textbuf); g_free(seg_usage.bitmap); memset(&seg_usage,sizeof(SEG_USAGE_T),0); ret = seg_usage4text(&seg_usage,textbuf); g_assert(ret == 0); g_assert(seg_usage.segno == 10); g_assert(seg_usage.inode_addr == 10101010); }
/* write trigger wb*/ void test_seg_usage_calc() { char * uri = "local:///tmp/testenv/testfs"; struct back_storage *storage = init_storage_handler(uri); uint32_t segment_size = 0; uint32_t block_size = 0; uint64_t max_fs_size = 0; int ret = read_fs_meta(storage,&segment_size, &block_size,&max_fs_size); g_assert(ret == 0); GHashTable * ss_hashtable = g_hash_table_new_full(g_str_hash,g_str_equal,NULL,NULL); ret = load_all_snapshot(storage,"snapshot.txt",ss_hashtable); printf("snapshot loaded\n"); g_assert(ret == 0); GList* ss_list = NULL; ret = sort_all_snapshot(ss_hashtable,&ss_list); printf("snapshot sorted\n"); g_assert(ss_list !=NULL); g_assert(ret == 0); int i; for(i=13;i<17;i++){ struct inode * inode=NULL; char *up_sname; ret = get_refer_inode_between_snapshots(storage,i,ss_list,&inode,&up_sname); printf("segno :%d ret:%d\n",i,ret); if(ret == 0){ printf("seg is in snapshots\n"); SEG_USAGE_T seg_usage; memset(&seg_usage,0,sizeof(SEG_USAGE_T)); ret = seg_usage_calc(storage,block_size,i,inode,&seg_usage); g_assert(ret ==0); char textbuf[4096]; memset(textbuf,4096,0); ret = seg_usage2text(&seg_usage,textbuf); g_assert(ret > 0); printf("textbuf is :%s\n",textbuf); } if(ret == 1){ printf("seg is on snapshot,do nothing\n"); } if(ret == 2){ printf("seg is above snapshot,maybe need migrate\n"); } } }
#include <stdio.h> #include <time.h> #include <sys/time.h> #include <stdint.h> #include <fcntl.h> #include <glib.h> #include "logger.h" #include "hlfs_ctrl.h" #include "hlfs_log.h" #include "misc.h" #include "comm_define.h" #include "storage.h" #include "seg_clean.h" int dump_seg_usage(struct back_storage *storage, \ const char *segment_usage_file, \ struct segment_usage *seg_usage){ //HLOG_DEBUG("enter func %s", __func__); //HLOG_DEBUG("enter func %s,seg usage file:%s" , \ __func__,segment_usage_file); char segtextbuf[4096]; memset(segtextbuf, 0, 0); uint32_t len = seg_usage2text(seg_usage, segtextbuf); int ret = file_append_contents(storage, segment_usage_file, \ segtextbuf, len); //HLOG_DEBUG("leave func %s", __func__); return ret; }