Ejemplo n.º 1
0
/*
 * Select some resources from the found tree
 * frt is found resource tree
 * prt is selected resource tree parent
 */
static resrc_tree_t *test_select_resources (resrc_tree_t *frt, resrc_tree_t *prt,
                                            int select)
{
    resrc_tree_t *selected_res = NULL;

    if (frt) {
        resrc_t *resrc = resrc_tree_resrc (frt);

        if (!strcmp (resrc_type(resrc), "core")) {
            if (resrc_id (resrc) == select)
                resrc_stage_resrc (resrc, 1, NULL);
            else
                goto ret;
        } else if (!strcmp (resrc_type(resrc), "memory"))
            resrc_stage_resrc (resrc, 100, NULL);

        selected_res = resrc_tree_new (prt, resrc);
        if (resrc_tree_num_children (frt)) {
            resrc_tree_t *child = resrc_tree_list_first (
                resrc_tree_children (frt));
            while (child) {
                (void) test_select_resources (child, selected_res, select);
                child = resrc_tree_list_next (resrc_tree_children (frt));
            }
        }
    }
ret:
    return selected_res;
}
Ejemplo n.º 2
0
static int rsreader_set_granular_digest (resrc_api_ctx_t *rsapi, machs_t *machs,
               resrc_tree_t *rt, char **err_str)
{
    char *e_str = NULL;
    const char *digest = NULL;
    int nsocks = 0, ncs = 0;
    int rc = -1;
    resrc_t *r = NULL;

    if (rt) {
        r = resrc_tree_resrc (rt);
        if (strcmp (resrc_type (r), "node")) {
            if (resrc_tree_num_children (rt)) {
                resrc_tree_list_t *children = resrc_tree_children (rt);
                if (children) {
                    resrc_tree_t *child = resrc_tree_list_first (children);

                    while (child) {
                        rc = rsreader_set_granular_digest (rsapi,
                                 machs, child, err_str);
                        if (rc)
                            break;
                        child = resrc_tree_list_next (children);
                    }
                }
            }
        } else if (!find_all_sockets_cores (rsapi, r, &nsocks, &ncs)) {
            /* matches based on the hostname, number of sockets and
             * cores.  This linking isn't used by hwloc reader so
             * count-based matching is okay
             */
            digest = rs2rank_tab_eq_by_count(machs, resrc_name (r), nsocks, ncs);
            if (digest) {
                (void) resrc_set_digest (r, xasprintf ("%s", digest));
                rc = 0;
            } else
                e_str = xasprintf ("%s: Can't find a matching resrc for "
                                   "<%s,%d,%d>", __FUNCTION__, resrc_name (r),
                                   nsocks, ncs);
        }
    }

    if (err_str)
        *err_str = e_str;
    else
        free (e_str);

    return rc;
}
Ejemplo n.º 3
0
static int rsreader_set_node_digest (machs_t *machs, resrc_tree_t *rt)
{
    const char *digest = NULL;
    int rc = -1;
    resrc_t *r = NULL;

    if (rt) {
        r = resrc_tree_resrc (rt);
        if (strcmp (resrc_type (r), "node")) {
            if (resrc_tree_num_children (rt)) {
                resrc_tree_list_t *children = resrc_tree_children (rt);
                if (children) {
                    resrc_tree_t *child = resrc_tree_list_first (children);

                    while (child) {
                        rc = rsreader_set_node_digest (machs, child);
                        if (rc)
                            break;
                        child = resrc_tree_list_next (children);
                    }
                }
            }
        } else {
            /* Use the digest from the first resource partition of
             * the first node in the machine table
             */
            digest = rs2rank_tab_eq_by_none (machs);
            if (digest) {
                (void) resrc_set_digest (r, xasprintf ("%s", digest));
                rc = 0;
            }
        }
    }

    return rc;
}