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;
}
static int
parse_namespace_info(worker_t *worker, GError **error)
{
	gchar *ns_name;
	asn1_session_t *asn1_session;
	namespace_data_t *ns_data;
	namespace_info_t *ns_info = NULL;


	asn1_session = asn1_worker_get_session(worker);
	ns_name = asn1_worker_get_session_data(worker);
	if (!ns_name || !asn1_session) {
		GSETERROR(error,"Invalid worker : no session data");
		return 0;
	}
	ns_data = g_hash_table_lookup(namespaces,ns_name);
	if (!ns_data) {
		GSETERROR(error,"Namespace '%s' does not exist", ns_name);
		return 0;
	}

	if (asn1_session->resp_body != NULL) {
		ns_info = namespace_info_unmarshall(asn1_session->resp_body,
				asn1_session->resp_body_size, error);
		if (ns_info == NULL) {
			GSETERROR(error, "Failed to unmarshall namespace_info from ASN1 data");
			return 0;
		}

		memcpy(&(ns_info->addr), &(ns_data->ns_info.addr), sizeof(addr_info_t));
		
		/* Check that we have the same name */
		if (strcmp(ns_info->name, ns_data->name)) {
			ERROR("Namespace name [%s] in /etc/gridstorage does not match name [%s] in conscience !",
				ns_data->name, ns_info->name);
			namespace_info_free(ns_info);
			return(0);
		}

		DEBUG("Infos of namespace [%s] updated with value name [%s] / chunk_size[%"G_GINT64_FORMAT"]",
			ns_data->ns_info.name, ns_info->name, ns_info->chunk_size);

		namespace_info_clear(&(ns_data->ns_info));
		namespace_info_copy(ns_info, &(ns_data->ns_info));
		namespace_info_free(ns_info);

		/* Flag namespace if it's the first config */
		ns_data->configured = TRUE;
	}

	return(1);
}
Example #3
0
static int
asn1_final_handler( worker_t *worker, GError **error )
{
	worker_t *original_worker;
	
	TRACE_POSITION();
	original_worker = asn1_worker_get_session_data(worker);
	if (!original_worker) {
		GSETERROR(error,"Request successful but reply failed due to invalid worker");
		return 0;
	}
	__respond_message( original_worker, 1, "OK", NULL );
	return 1;
}
Example #4
0
static int
asn1_error_handler( worker_t *worker, GError **error )
{
	worker_t *original_worker;

	TRACE_POSITION();
	GSETERROR(error, "Failed to send the 'erroneous containers flush' order");
	original_worker = asn1_worker_get_session_data(worker);
	if (!original_worker) {
		GSETERROR(error,"Failed due to invalid worker");
		return 0;
	}
	__respond_error( original_worker, error?*error:NULL, NULL );
	return 1;
}
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);
}