Exemple #1
0
/**
 * Destroy the store.
 *
 * @param p the store to destroy
 * @raise IO_ERROR if there is an error deleting the locks
 */
static void fs_destroy(Store *store)
{
    TRY
        fs_clear_locks(store);
    XCATCHALL
        HANDLED();
    XENDTRY
    free(store->dir.path);
    store_destroy(store);
}
Exemple #2
0
static void ram_close_i(Store *store)
{
    Hash *ht = store->dir.ht;
    int i;
    for (i = 0; i <= ht->mask; i++) {
        RAMFile *rf = (RAMFile *)ht->table[i].value;
        if (rf) {
            DEREF(rf);
        }
    }
    h_destroy(store->dir.ht);
    store_destroy(store);
}
Exemple #3
0
static void cmpd_close_i(Store *store)
{
    CompoundStore *cmpd = store->dir.cmpd;
    if (cmpd->stream == NULL) {
        RAISE(IO_ERROR, "Tried to close already closed compound store");
    }

    h_destroy(cmpd->entries);

    is_close(cmpd->stream);
    cmpd->stream = NULL;
    free(store->dir.cmpd);
    store_destroy(store);
}
Exemple #4
0
void degenerator_destroy (Degenerator_t * degenerator){
	store_destroy(degenerator->_store);
    free(degenerator);
}
Exemple #5
0
int 
main(int argc, char** argv) {
	char path[50] = { 0x00 };
	if (2 <= argc) {
		strncpy(path, argv[1], strlen(argv[1]));
	} else {
		strncpy(path, "server.cfg", 10);
	}

	//读取配置文件
	TinyConf* config; 
	char* run;
	for(;;) {
		config = conf_open(path, '=');
		if(NULL == config) {
			sleep(5);
			continue;
		}

		run = conf_get(config, "run");
		if(0 >= strlen(run)) { 
			sleep(5);
			continue;
		} 

		if(0 != strcmp(run, "on")) {
			sleep(5);
			continue;
		}

		break; //一切ok,启动正常处理
	}

	//初始化mysql配置
	char* mysql_host = conf_get(config, "mysql_host");
	char* mysql_port_str = conf_get(config, "mysql_port");
	char* mysql_user = conf_get(config, "mysql_user");
	char* mysql_password = conf_get(config, "mysql_password");
	char* mysql_database = conf_get(config, "mysql_database");

	//将数据库设置存入到map中
	TinyMap* store_map = map_create();
	map_add(store_map, "host", mysql_host, NULL);
	map_add(store_map, "port", mysql_port_str, NULL);
	map_add(store_map, "user", mysql_user, NULL);
	map_add(store_map, "password", mysql_password, NULL);
	map_add(store_map, "database", mysql_database, NULL);

	//初始化tcpserver的相关代码
	int tcp_port = 7000;
	char* tcp_port_str = conf_get(config, "port");
	if(0 < strlen(tcp_port_str)) {
		tcp_port = atoi(tcp_port_str);
	}

	TCPServer* tcp_server = tcp_server_create(tcp_port); //生成tcp服务器实例
	if(NULL == tcp_server) {
		fprintf(stderr, "Create server falied.\n");
	}

	tcp_server_set_proc_callback(tcp_server, store_map, analyze_proc); //注册数据处理的回调函数
	tcp_server_set_timeout_callback(tcp_server, store_map, analyze_timeout); //注册客户端连接超时的回调函数

	int ret = tcp_server_start(tcp_server); //启动tcp服务器
	if(-1 == ret) {
 		fprintf(stderr, "Start tcpserver falied.\n");
 		return 0;
	}


	//创建存储实例
	Store* store = store_create(mysql_host, atoi(mysql_port_str), mysql_user, mysql_password, mysql_database);

	//创建网络检测线程
	pthread_t thread_id;
	int p_ret = pthread_create(&thread_id, NULL, (void*)check_networks, store);
	if(0 != p_ret) {
		fprintf(stderr, "%s\n", "create networks check thread err.");
	}

	for(;;) { //阻塞
		sleep(1000);
	}

	pthread_cancel(thread_id); //退出线程
	store_destroy(store); //销毁存储实例
	tcp_server_stop(tcp_server); //停止tcp服务器实例
	tcp_server_destroy(tcp_server); //销毁tcp服务器实例
	map_destroy(store_map); //销毁store_map实例
	conf_close(config); //关闭配置信息读取实例
	return 0;
}
Exemple #6
0
int main(int argc, char ** argv){
	srand(time(NULL));

	Config_t * config = config_create (argc, argv);
	if (!config_is_valid (config)) { config_usage (config); exit(-1); }
    pDEBUG("Got config from command line\n");

	config_set (config);
    pDEBUG("Config set\n");

	// en fonction de la commande 
	switch (config->command){
		case COMMAND_TP1_FILTER_EX2:
			{
				Filter_t * filter = filter_create(&(config->io), 
						config->filter_size,
						config->filter_offset);
				filter_run (filter);
				filter_destroy (filter);
			}
			break;

		case COMMAND_TP1_DEGREE_EX3:
			{	
				Degree_t * degree = degree_create (&(config->io),	
						config->nodecount,						
						MODE_DEGREE);
				degree_set_output (degree, true);
				degree_fill_from_input_graph (degree);
				degree_destroy (degree);
			}
			break;

		case COMMAND_TP1_STORE_GRAPH_EX4:
			{
				Store_t * store = store_create(&(config->io), 
						config->nodecount);
				store_fill_from_input_graph (store);
				store_destroy (store);
			}
			break;

		case COMMAND_TP1_DENSITY_AVGDEGREE_MAXDEGREE_EX5:
			{
				Degree_t * degree = degree_create (&(config->io),	
						config->nodecount,						
						MODE_DEGSTATS);
				degree_set_output (degree, true);
				degree_fill_from_input_graph (degree);
				degree_destroy (degree);
			}
			break;

		case COMMAND_TP1_CONNEXITY_EX6:
			{
				Store_t * store = store_create(&(config->io), 
						config->nodecount);
				store_fill_from_input_graph (store);
				store_connexity (store, NULL);
				store_destroy (store);
			}
			break;

		case COMMAND_TP1_CONNEXITY_DEFI:
			{
				Defi_t * defi = defi_create(&(config->io),
						config->nodecount);
				defi_run (defi);
				defi_destroy (defi);
			}
			break;

		case COMMAND_TP2_DISTANCE_ONE_TO_OTHER_EX1:
			{
				fprintf(stderr,"Exercice 1 - Ecrire un  programme qui,  étant  donné un\n");
				fprintf(stderr," graphe et un de ses noeud,  calcule la distance  de ce\n");
				fprintf(stderr," noeud  a tous  les  autres,  ainsi que  la moyenne  de\n");
				fprintf(stderr," toutes ces distances.\n\n");

				Distance_t * distance = distance_create((&config->io),
						config->nodecount);
				distance_set_mode (distance, MODE_MAX_AND_AVERAGE);

				distance_set_root (distance, config->root_index);
				distance_set_iterations (distance, 1);

				distance_compute (distance);
				distance_destroy (distance);
			}
			break;

		case COMMAND_TP2_PLOT_DISTRIB_DISTANCES_EX2:
			{
				fprintf(stderr,"Exercice 2 - Tracer la  distribution des  distances à un\n");
				fprintf(stderr," noeud donné, c'est à dire pour chaque entier  i le nom-\n");
				fprintf(stderr," bre de noeuds à distance i du noeud donné.\n\n");
				
				Distance_t * distance = distance_create((&config->io),
						config->nodecount);
				distance_set_mode (distance, MODE_MAX_DISTRIBUTION);

				distance_set_root (distance, config->root_index);
				distance_set_iterations (distance, 1);

				distance_compute (distance);
				distance_destroy (distance);
			}
			break;
		case COMMAND_TP2_EVOL_OF_DISTS_FNC_NB_PARCOURS_EX3:
			{
				fprintf(stderr, "Exercice 3 - Ecrire un  programme  qui permet  de tracer\n");
				fprintf(stderr, " l'évolution de  l'estimation de  la distance moyenne en\n");
				fprintf(stderr, " fonction du nombre de parcours effectués.\n");
				fprintf(stderr, "A chaque étape, le programme calcule la distance moyenne\n");
				fprintf(stderr, " d'un noeud à tous les autres, puis fait la moyenne avec\n");
				fprintf(stderr, " toutes les valeurs précédentes.\n\n");
						
				Distance_t * distance = distance_create((&config->io),
						config->nodecount);
				distance_set_mode (distance, MODE_EVOLUTION);

				distance_set_root (distance, config->root_index);
				distance_set_iterations (distance, config->iterations);

				distance_compute (distance);
				distance_destroy (distance);
			}
			break;
		case COMMAND_TP2_LIMIT_INFERIOR_EX4:
			{
				fprintf(stderr, "Exercice 4 - Ecrire un  programme qui  calcule une borne\n");
				fprintf(stderr, " inférieure du diamètre, en prenant la distance maximale\n");
				fprintf(stderr, " d'un noeud donné à tous les autres.\n\n");

				Distance_t * distance = distance_create((&config->io),
						config->nodecount);
				distance_set_mode (distance, MODE_SHOW_LIMIT_INF);

				distance_set_root (distance, config->root_index);
				distance_set_iterations (distance, config->iterations);

				distance_compute (distance);
				distance_destroy (distance);
			}
			break;
		case COMMAND_TP2_LIMIT_SUPERIOR_EX5:
			{
				fprintf(stderr, "Exercice 5 - Ecrire un programme  qui calcule  une borne\n");
				fprintf(stderr, " supérieure du diamètre, en prenant la distance maximale\n");
				fprintf(stderr, " dans l'arbre du parcours en largeur.\n\n");

				Distance_t * distance = distance_create((&config->io),
						config->nodecount);
				distance_set_mode (distance, MODE_SHOW_LIMIT_SUP);

				distance_set_root (distance, config->root_index);
				distance_set_iterations (distance, config->iterations);

				distance_compute (distance);
				distance_destroy (distance);
			}
			break;
		case COMMAND_TP2_EVOLUTION_AND_LIMITS_DEFI:
			{
				fprintf(stderr, "Défi - Ecrire un  programme qui  donne un  encadrement de\n");
				fprintf(stderr, " plus en plus fin  du diamètre d'un graphe.  Le programme\n");
				fprintf(stderr, " effectue à  chaque étape  un parcours  en largeur et  en\n");
				fprintf(stderr, " déduit une borne inférieure et une borne supérieure pour\n");
				fprintf(stderr, " le diamètre.  Si elle  améliorent le résultat  elle sont\n");
				fprintf(stderr, " conservées  à la  place des meilleures  valeurs trouvées\n");
				fprintf(stderr, " lors des étapes précédentes.\n\n");
				
				Distance_t * distance = distance_create((&config->io),
						config->nodecount);
				distance_set_mode (distance, MODE_DEFI);

				distance_set_root (distance, config->root_index);
				distance_set_iterations (distance, config->iterations);

				distance_compute (distance);
				distance_destroy (distance);
			}
			break;

		case COMMAND_TP3_DISTRIB_DEG_EX1:
			{
				fprintf(stderr, "Exercice 1 - Ecrire un programme qui calcule la distribu-\n");
				fprintf(stderr, " tion des degrés d'un graphe.\n");

				Degree_t * degree = degree_create (&(config->io),	
						config->nodecount,						
						MODE_DEGREE);
				degree_set_output (degree, false);
				degree_fill_from_input_graph (degree);

				degree_output_distribution (degree);
				degree_destroy (degree);

			}
			break;

		case COMMAND_TP3_EVOL_AVG_DEG_EX2:
			{
				Store_t * store = store_create(&(config->io), 
						config->nodecount);
				store_fill_from_input_graph (store);

				store_compute_avg_degree(store, config->iterations);

				store_destroy (store);

			}
			break;

		case COMMAND_TP3_GENERATE_EX3:
			{

				fprintf(stderr, "Generating a random graph\n");

				Generator_t * generator = generator_create(&(config->io),
						config->nodecount,
						config->filter_size);

				generator_run (generator);
				generator_destroy (generator); 
			}
			break;
			
		case COMMAND_TP3_DEGENERATE_EX5:
			{
				fprintf(stderr, "Degenerating input graph\n");
				Degenerator_t * degen = degenerator_create (&(config->io),
						config->nodecount, config->iterations);						
				degenerator_set_select_mode (degen, DEGENERATOR_SELECT_RANDOM);

				degenerator_compute (degen);
				degenerator_destroy (degen);
			}
			break;
	
		case COMMAND_TP3_DEGENERATE_MAX_DEG_EX7:
			{
				fprintf(stderr, "Degenerating input graph with max degrees first\n");
				Degenerator_t * degen = degenerator_create (&(config->io),
						config->nodecount, config->iterations);						
				degenerator_set_select_mode (degen, DEGENERATOR_SELECT_MAX_DEG);

				degenerator_compute (degen);
				degenerator_destroy (degen);
			}
			break;

		default:
			{
				printf("Undefined mode\n");
			}
			break;
	}

	config_destroy (config);

	return EXIT_SUCCESS;
}