Ejemplo n.º 1
0
static void config_hwloc_paths (flux_t h, const char *dirpath)
{
    uint32_t size, rank;
    const char *key_prefix = "config.resource.hwloc.xml";
    char key[64];
    char path[PATH_MAX];
    int n;

    if (flux_get_size (h, &size) < 0)
        log_err_exit ("flux_get_size");
    for (rank = 0; rank < size; rank++) {
        n = snprintf (key, sizeof (key), "%s.%"PRIu32, key_prefix, rank);
        assert (n < sizeof (key));
        if (dirpath == NULL) {
            /* Remove any per rank xml and reload default xml */
            if (kvs_unlink (h, key) < 0)
                log_err_exit ("kvs_unlink");
            continue;
        }
        n = snprintf (path, sizeof (path), "%s/%"PRIu32".xml", dirpath, rank);
        assert (n < sizeof (path));
        if (access (path, R_OK) < 0)
            log_err_exit ("%s", path);
        if (kvs_put_string (h, key, path) < 0)
            log_err_exit ("kvs_put_string");
    }
    if (kvs_commit (h) < 0)
        log_err_exit ("kvs_commit");
}
Ejemplo n.º 2
0
int kvs_conf_save (flux_t h, flux_conf_t cf)
{
    flux_conf_itr_t itr = flux_conf_itr_create (cf);
    const char *key;
    int rc = -1;

    if (kvs_unlink (h, kvs_conf_root) < 0)
        goto done;
    if (kvs_commit (h) < 0)
        goto done;
    while ((key = flux_conf_next (itr))) {
        char *nkey = xasprintf ("%s.%s", kvs_conf_root, key);
        const char *val = flux_conf_get (cf, key);
        int n = kvs_put_string (h, nkey, val);
        free (nkey);
        if (n < 0)
            goto done;
    }       
    if (kvs_commit (h) < 0)
        goto done;
    rc = 0;
done:
    flux_conf_itr_destroy (itr);
    return rc;
}
Ejemplo n.º 3
0
void cmd_unlink (flux_t h, int argc, char **argv)
{
    int i;

    if (argc == 0)
        msg_exit ("unlink: specify one or more keys");
    for (i = 0; i < argc; i++) {
        /* FIXME: unlink nonexistent silently fails */
        /* FIXME: unlink directory silently succedes */
        if (kvs_unlink (h, argv[i]) < 0)
            err_exit ("%s", argv[i]);
    }
    if (kvs_commit (h) < 0)
        err_exit ("kvs_commit");
}
Ejemplo n.º 4
0
kz_t *kz_open (flux_t *h, const char *name, int flags)
{
    kz_t *kz = xzmalloc (sizeof (*kz));

    kz->flags = flags;
    kz->name = xstrdup (name);
    if ((kz->stream = strchr (kz->name, '.')))
        kz->stream++;
    else
        kz->stream = kz->name;
    kz->h = h;

    if ((flags & KZ_FLAGS_WRITE)) {
        if (key_exists (h, name)) {
            if (!(flags & KZ_FLAGS_TRUNC)) {
                errno = EEXIST;
                goto error;
            } else if (kvs_unlink (h, name) < 0)
                goto error;
        }
        if (kvs_mkdir (h, name) < 0) /* N.B. does not catch EEXIST */
            goto error;
        if (!(flags & KZ_FLAGS_NOCOMMIT_OPEN)) {
            if (kvs_commit (h) < 0)
                goto error;
        }
    } else if ((flags & KZ_FLAGS_READ)) {
        if (!(flags & KZ_FLAGS_NOEXIST)) {
            if (kvs_get_dir (h, &kz->dir, "%s", name) < 0)
                goto error;
        }
    }
    return kz;
error:
    kz_destroy (kz);
    return NULL;
}