Example #1
0
/*  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);


}
Example #2
0
/*  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");
        }
    }

}
Example #3
0
#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;
}