Ejemplo n.º 1
0
/**
 * FIXME TODO XXX file load duplicated at cluster/lib/gridcluster.c : gba_read()
 */
static int
cpu_stat_task_worker(gpointer udata, GError ** error)
{
	char end_of_buffer = '\0';
	int fd = 0;
	ssize_t rl;
	char *procstat = NULL;
	GByteArray *buffer = NULL;
	char buff[DEFAULT_BUFFER_SIZE];
	proc_stat_t pstat;

	(void)udata;

	fd = open(PROC_STAT, O_RDONLY);
	if (fd < 0) {
		GSETERROR(error, "Failed to open file [%s] : %s", PROC_STAT, strerror(errno));
		task_done(TASK_ID);
		return 0;
	}

	buffer = g_byte_array_new();
	while ((rl = read(fd, buff, DEFAULT_BUFFER_SIZE)) > 0)
		buffer = g_byte_array_append(buffer, (guint8*)buff, rl);
	metautils_pclose(&fd);

	if (rl < 0) {
		GSETERROR(error, "Read file [%s] failed with error : %s", PROC_STAT, strerror(errno));
		g_byte_array_free(buffer, TRUE);
		task_done(TASK_ID);
		return 0;
	}

	/*ensure the statistics string is NULL-terminated */
	g_byte_array_append(buffer, (guint8*)&end_of_buffer, sizeof(end_of_buffer));
	procstat = (char*)g_byte_array_free(buffer, FALSE);

	memset(&pstat, 0, sizeof(proc_stat_t));

	if (sscanf(procstat, "cpu  %llu %llu %llu %llu %llu %llu %llu",
		&(pstat.user), &(pstat.nice), &(pstat.system), &(pstat.idle),
		&(pstat.io_wait), &(pstat.irq), &(pstat.soft_irq)) == 7) {

		memcpy(&(cpu_stat.previous), &(cpu_stat.current), sizeof(proc_stat_t));
		memcpy(&(cpu_stat.current), &pstat, sizeof(proc_stat_t));
		nb_loops++;
	}
	else {
		WARN("Failed to scan cpu in string [%s]", procstat);
	}

	g_free(procstat);
	task_done(TASK_ID);
	return (1);
}
Ejemplo n.º 2
0
/* Task 2 Binary Search Tree -- search */
void task_3(){
//start_Task3:
	//puts("task3\n");
	//search_node(s_search_tree, 5);
	//search_node(s_search_tree, 6);
	//search_node(s_search_tree, 12);
	/*putchar(10);*/

//	CLI
	putchar('C');
//	STI
	for(int i=0;i<5;i++){
		int dest0 = reverse_integer(123456789);
		int dest1 = reverse_integer(-123456789);
		int dest2 = reverse_integer(0);
		int dest3 = reverse_integer(1000);
		int dest4 = reverse_integer(-1000);
	}
	/*putchar('w');*/
	/*putchar(10);*/

	if(wait_after_done){
		task_done(s_processor);
//		goto start_Task3;
		while (1)
		{
   /*         putchar('C');*/
			/*putchar(10);*/
		}
	}
	
}
Ejemplo n.º 3
0
static gboolean
task_starter(gpointer udata, GError **error)
{
	gpointer ns_k, ns_v;
	GHashTableIter ns_iterator;

	task_t *task;
	gchar ns_id[sizeof(TASK_ID)+1+LIMIT_LENGTH_NSNAME];
	namespace_data_t *ns_data;

	(void)udata;
	g_hash_table_iter_init(&ns_iterator, namespaces);
	while (g_hash_table_iter_next(&ns_iterator,&ns_k,&ns_v)) {
		ns_data = ns_v;
		g_snprintf(ns_id,sizeof(ns_id),TASK_ID".%s",ns_data->name);
		if (!namespace_is_available(ns_data)) {
			if (!is_task_scheduled(ns_id)) {
				task = create_task(period_get_ns, ns_id);
				task = set_task_callbacks(task, task_worker, g_free, g_strdup(ns_data->name));
				if (!add_task_to_schedule(task, error)) {
					ERROR("[task_id="TASK_ID"] Failed to start a sub worker for namespace '%s'", (gchar*)ns_k);
					g_free(task);
				}
				else
					INFO("[task_id="TASK_ID"] subtask started [%s]", ns_id);
			}
		}
	}
	task_done(TASK_ID);
	return 1;
}
Ejemplo n.º 4
0
static void
session_data_cleaner(gpointer p)
{
	gchar task_id[sizeof(TASK_ID)+1+LIMIT_LENGTH_NSNAME];
	if (!p)
		return;
	g_snprintf(task_id, sizeof(task_id), TASK_ID".%s", (gchar*)p);
	task_done(task_id);
	g_free(p);
}
Ejemplo n.º 5
0
void reboot(void)
{
	task_done();
	
#ifdef CONFIG_DEBUG
	log(LF_OTHER, LVL_DEBUG, "Rebooting the system");
#endif
	
	arch_reboot();
	halt();
}
Ejemplo n.º 6
0
void reboot(void)
{
	task_done();
	
#ifdef CONFIG_DEBUG
	printf("Rebooting the system\n");
#endif
	
	arch_reboot();
	halt();
}
Ejemplo n.º 7
0
static int
final_handler(worker_t *worker, GError **error)
{
	gchar *ns_name;
	gchar task_id[sizeof(TASK_ID)+1+LIMIT_LENGTH_NSNAME];
	
	(void)error;
	ns_name = asn1_worker_get_session_data(worker);
	g_snprintf(task_id, sizeof(task_id), TASK_ID".%s", ns_name);
	task_done(task_id);
	return 1;
}
Ejemplo n.º 8
0
static int
error_handler(worker_t *worker, GError **error)
{
	gchar *ns_name;
	gchar task_id[sizeof(TASK_ID)+1+LIMIT_LENGTH_NSNAME];


	ns_name = asn1_worker_get_session_data(worker);
	if (ns_name)
		GSETERROR(error, "[task_id=%s.%s] Failed to request namespace info", TASK_ID, ns_name);
	else
		GSETERROR(error, "[task_id=%s.?] Failed to request namespace info", TASK_ID);
	
	g_snprintf(task_id, sizeof(task_id), TASK_ID".%s", ns_name);
	task_done(task_id);
        return(1);
}
Ejemplo n.º 9
0
static void
_check_tcp_service_worker_cleaner(worker_t *worker)
{
	struct workerdata_checksrv_s *wdata;


	wdata = worker->data.session;
	task_done(wdata->task_name);

	if (wdata->flag_connected) {
		_mark_service_state(wdata->ns_name, wdata->srv_key, TRUE);
		DEBUG("Connection attempt successful to [%s/%s]", wdata->ns_name, wdata->srv_key);
	}
	else {
		_mark_service_state(wdata->ns_name, wdata->srv_key, FALSE);
		WARN("Connection attempt failed to [%s/%s]", wdata->ns_name, wdata->srv_key);
	}	

	g_free(wdata);
}
Ejemplo n.º 10
0
/**
 * Starts a 
 */
static int
allservices_check_starter(gpointer udata, GError **error)
{
	GHashTableIter iter_ns;
	gpointer k, v;

	(void) udata;
	(void) error;
	
	/*ensure there is a task started for each services locally registered*/
	g_hash_table_iter_init(&iter_ns, namespaces);
	while (g_hash_table_iter_next(&iter_ns, &k, &v)) {
		struct namespace_data_s *ns_data = v;
		TRACE("Checking NS=[%s]", (gchar*)k);
		allservice_check_start_HT(ns_data, ns_data->local_services);
		allservice_check_start_HT(ns_data, ns_data->down_services);
		_detect_obsolete_services(ns_data);
	}

	task_done(TASK_ID);
	return 1;
}
Ejemplo n.º 11
0
/* Task 1 Reverse Integer */
void task_1() {
//start_Task1:
	if(wait_after_done==0){
		/*puts("task1 start\n");*/
   /*     putchar(10);*/
		/*putchar('1');*/
		/*putchar('s');*/
		/*putchar(10);*/
	}
//	CLI
__asm__("j7 7");
	putchar('A');
//
	int dest0 = reverse_integer(123456789);
	int dest1 = reverse_integer(-123456789);
	int dest2 = reverse_integer(0);
	putchar('a');
	int dest3 = reverse_integer(1000);
	int dest4 = reverse_integer(-1000);
//	putchar('a');

	if(wait_after_done==1){
		task_done(s_processor);
	//	goto start_Task1;
		while (1)
		{
//			CLI
   /*         putchar('A');*/
			/*putchar(10);*/
//			STI
		}
	}else{
		/*puts("task1 done\n");*/
   /*    putchar('1');*/
		/*putchar('e');*/
		/*putchar(10);*/
	}
}
Ejemplo n.º 12
0
/* Task 2 Binary Search Tree -- insert & delete */
void task_2(){
//start_Task2:
	//puts("task2\n");
	//insert(s_search_tree, 14);
	//insert(s_search_tree, 15);
	//insert(s_search_tree, 2);

	//delete(s_search_tree, 14);
	//delete(s_search_tree, 15);
	//delete(s_search_tree, 2);

//	CLI
	putchar('B');
//	STI
	for(int i=0;i<3;i++){
		int dest0 = reverse_integer(123456789);
		int dest1 = reverse_integer(-123456789);
		int dest2 = reverse_integer(0);
		int dest3 = reverse_integer(1000);
		int dest4 = reverse_integer(-1000);
	}
	putchar('b');

	if(wait_after_done){
		task_done(s_processor);
//		goto start_Task2;
		while (1)
		{
//			CLI
   /*         putchar('B');*/
			/*putchar(10);*/
//			STI
		}

	}
	
}
Ejemplo n.º 13
0
/**
 * Check the service still exists and start a worker that will
 * just perform a TCP-connect test.
 */
static int
_check_tcp_service_task(gpointer udata, GError **error)
{
	struct service_info_s *si;
	struct namespace_data_s *ns_data;
	struct taskdata_checksrv_s *task_data;
	
	task_data = udata;

	ns_data = g_hash_table_lookup(namespaces, task_data->ns_name);
	if (!ns_data) {
		task_done(task_data->task_name);
		GSETERROR(error, "Namespace unavailable");
		return 0;
	}

	/* if the service does not exists, the task itself is de-scheduled */
	if (!(si=g_hash_table_lookup(ns_data->local_services, task_data->srv_key))
	    && !(si=g_hash_table_lookup(ns_data->down_services, task_data->srv_key))) {
		task_done(task_data->task_name);
		task_stop(task_data->task_name);
		INFO("Service [%s] does not exist, stopping task [%s]", task_data->srv_key, task_data->task_name);
		return 1;
	}

	/* Now start a worker for this service. The worker has its own session_data,
	 * without hard reference to the task_t or the namespace_data_t */
	do {
		int fd = addrinfo_connect_nopoll(&(si->addr), 1000, error);
		if (0 > fd) {
			GSETERROR(error, "Connection to gridd server failed : (%d) %s",
					errno, strerror(errno));
			return 0;
		}

		sock_set_linger(fd, 1, 0);

		struct workerdata_checksrv_s *wdata = g_malloc0(sizeof(*wdata));
		g_strlcpy(wdata->task_name, task_data->task_name, sizeof(wdata->task_name)-1);
		g_strlcpy(wdata->ns_name, task_data->ns_name, sizeof(wdata->ns_name)-1);
		g_strlcpy(wdata->srv_key, task_data->srv_key, sizeof(wdata->srv_key)-1);

		worker_t *worker = g_malloc0(sizeof(worker_t));
		worker->func = _check_tcp_service_worker_func;
		worker->clean = _check_tcp_service_worker_cleaner;
		worker->timeout.startup = 1000;
		worker->timeout.activity = 1000;
		worker->data.sock_timeout = 1000;
		worker->data.fd = fd;
		worker->data.session = wdata;

		if (!add_fd_to_io_scheduler(worker, EPOLLOUT, error)) {
			_mark_service_state(task_data->ns_name, wdata->srv_key, FALSE);
			task_done(task_data->task_name);
			g_free(worker);
			g_free(wdata);
			GSETERROR(error, "Failed to add socket fd=%d to io_scheduler : %s", fd, strerror(errno));
			return 0;
		}
		
		TRACE("TCP-connect tried to [%s] for [%s] (fd=%d)", task_data->srv_key, task_data->task_name, fd);
	} while (0);

        return 1;
}