Loading src/lib/admire.h +26 −5 Original line number Diff line number Diff line Loading @@ -134,11 +134,32 @@ typedef enum { typedef enum { ADM_QOS_CLASS_BANDWIDTH, ADM_QOS_CLASS_IOPS } ADM_qos_class_t; /** An ADMIRE entity upon which QoS can be defined */ typedef union { ADM_node_t l_node; ADM_job_t l_job; ADM_dataset_handle_t l_dataset; } ADM_qos_entity_t; typedef struct adm_qos_entity* ADM_qos_entity_t; /** * Create a QoS entity given a scope, a node, a dataset, or a job. * * @remark QoS entities need to be freed by calling ADM_qos_entity_destroy(). * * @param scope The scope of the entity, i.e. ADM_QOS_SCOPE_DATASET, * ADM_QOS_SCOPE_NODE, or ADM_QOS_SCOPE_JOB. * @param ... A single argument with data from either a ADM_dataset_t, * ADM_node_t, or ADM_job_t variable. The argument must correspond properly * to the scope provided. * @return A valid ADM_qos_entity_t if successful or NULL in case of failure. */ ADM_qos_entity_t ADM_qos_entity_create(ADM_qos_scope_t scope, ...); /** * Destroy a QoS entity created by ADM_qos_entity_create(). * * @param[in] entity A valid ADM_qos_entity_t * @return ADM_SUCCESS or corresponding ADM error code */ ADM_return_t ADM_qos_entity_destroy(ADM_qos_entity_t entity); /** A QoS limit */ typedef struct { Loading src/lib/c_wrapper.cpp +55 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,15 @@ struct adm_job { uint64_t j_id; }; struct adm_qos_entity { ADM_qos_scope_t e_scope; union { ADM_node_t e_node; ADM_job_t e_job; ADM_dataset_handle_t e_dataset; }; }; /** The I/O requirements for a job */ struct adm_job_requirements { /** An array of input datasets */ Loading Loading @@ -153,6 +162,52 @@ ADM_dataset_destroy(ADM_dataset_handle_t dataset) { return ret; } ADM_qos_entity_t ADM_qos_entity_create(ADM_qos_scope_t scope, ...) { struct adm_qos_entity* adm_qos_entity = (struct adm_qos_entity*) malloc(sizeof(struct adm_qos_entity)); if(!adm_qos_entity) { LOGGER_ERROR("Could not allocate ADM_qos_entity_t") return NULL; } adm_qos_entity->e_scope = scope; va_list ap; va_start(ap, scope); switch(scope) { case ADM_QOS_SCOPE_NODE: adm_qos_entity->e_node = va_arg(ap, ADM_node_t); break; case ADM_QOS_SCOPE_JOB: adm_qos_entity->e_job = va_arg(ap, ADM_job_t); break; case ADM_QOS_SCOPE_DATASET: adm_qos_entity->e_dataset = va_arg(ap, ADM_dataset_handle_t); break; } va_end(ap); return adm_qos_entity; } ADM_return_t ADM_qos_entity_destroy(ADM_qos_entity_t entity) { ADM_return_t ret = ADM_SUCCESS; if(!entity) { LOGGER_ERROR("Invalid ADM_qos_entity_t") return ADM_EBADARGS; } free(entity); return ret; } ADM_job_requirements_t ADM_job_requirements_create(ADM_dataset_handle_t inputs[], size_t inputs_len, ADM_dataset_handle_t outputs[], size_t outputs_len, Loading Loading
src/lib/admire.h +26 −5 Original line number Diff line number Diff line Loading @@ -134,11 +134,32 @@ typedef enum { typedef enum { ADM_QOS_CLASS_BANDWIDTH, ADM_QOS_CLASS_IOPS } ADM_qos_class_t; /** An ADMIRE entity upon which QoS can be defined */ typedef union { ADM_node_t l_node; ADM_job_t l_job; ADM_dataset_handle_t l_dataset; } ADM_qos_entity_t; typedef struct adm_qos_entity* ADM_qos_entity_t; /** * Create a QoS entity given a scope, a node, a dataset, or a job. * * @remark QoS entities need to be freed by calling ADM_qos_entity_destroy(). * * @param scope The scope of the entity, i.e. ADM_QOS_SCOPE_DATASET, * ADM_QOS_SCOPE_NODE, or ADM_QOS_SCOPE_JOB. * @param ... A single argument with data from either a ADM_dataset_t, * ADM_node_t, or ADM_job_t variable. The argument must correspond properly * to the scope provided. * @return A valid ADM_qos_entity_t if successful or NULL in case of failure. */ ADM_qos_entity_t ADM_qos_entity_create(ADM_qos_scope_t scope, ...); /** * Destroy a QoS entity created by ADM_qos_entity_create(). * * @param[in] entity A valid ADM_qos_entity_t * @return ADM_SUCCESS or corresponding ADM error code */ ADM_return_t ADM_qos_entity_destroy(ADM_qos_entity_t entity); /** A QoS limit */ typedef struct { Loading
src/lib/c_wrapper.cpp +55 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,15 @@ struct adm_job { uint64_t j_id; }; struct adm_qos_entity { ADM_qos_scope_t e_scope; union { ADM_node_t e_node; ADM_job_t e_job; ADM_dataset_handle_t e_dataset; }; }; /** The I/O requirements for a job */ struct adm_job_requirements { /** An array of input datasets */ Loading Loading @@ -153,6 +162,52 @@ ADM_dataset_destroy(ADM_dataset_handle_t dataset) { return ret; } ADM_qos_entity_t ADM_qos_entity_create(ADM_qos_scope_t scope, ...) { struct adm_qos_entity* adm_qos_entity = (struct adm_qos_entity*) malloc(sizeof(struct adm_qos_entity)); if(!adm_qos_entity) { LOGGER_ERROR("Could not allocate ADM_qos_entity_t") return NULL; } adm_qos_entity->e_scope = scope; va_list ap; va_start(ap, scope); switch(scope) { case ADM_QOS_SCOPE_NODE: adm_qos_entity->e_node = va_arg(ap, ADM_node_t); break; case ADM_QOS_SCOPE_JOB: adm_qos_entity->e_job = va_arg(ap, ADM_job_t); break; case ADM_QOS_SCOPE_DATASET: adm_qos_entity->e_dataset = va_arg(ap, ADM_dataset_handle_t); break; } va_end(ap); return adm_qos_entity; } ADM_return_t ADM_qos_entity_destroy(ADM_qos_entity_t entity) { ADM_return_t ret = ADM_SUCCESS; if(!entity) { LOGGER_ERROR("Invalid ADM_qos_entity_t") return ADM_EBADARGS; } free(entity); return ret; } ADM_job_requirements_t ADM_job_requirements_create(ADM_dataset_handle_t inputs[], size_t inputs_len, ADM_dataset_handle_t outputs[], size_t outputs_len, Loading