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"); }
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; }
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"); }
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; }