static int update_rdl_alloc (flux_t *h, int64_t j, json_object *o) { int i = 0; int rc = -1; int size = 0; json_object *ra_e = NULL; const char *key = NULL; zhash_t *rtab = NULL; int64_t *ncores = NULL; flux_kvs_txn_t *txn = NULL; flux_future_t *f = NULL; if (!(rtab = zhash_new ())) oom (); if (!Jget_ar_len (o, &size)) goto done; for (i=0; i < (int) size; ++i) { if (!Jget_ar_obj (o, i, &ra_e)) goto done; /* 'o' represents an array of per-node core count to use. * However, becasue the same rank can appear multiple times * in this array in emulation mode, update_hash_1ra is * used to determine the total core count per rank. */ if ( (rc = update_hash_1ra (h, j, ra_e, rtab)) < 0) goto done; } if (!(txn = flux_kvs_txn_create ())) { flux_log_error (h, "txn_create"); goto done; } FOREACH_ZHASH (rtab, key, ncores) { if ( (rc = flux_kvs_txn_pack (txn, 0, key, "I", *ncores)) < 0) { flux_log_error (h, "put %s", key); goto done; } } if (!(f = flux_kvs_commit (h, 0, txn)) || flux_future_get (f, NULL) < 0) { flux_log (h, LOG_ERR, "update_pdesc commit failed"); goto done; } rc = 0; done: flux_future_destroy (f); flux_kvs_txn_destroy (txn); zhash_destroy (&rtab); return rc; }
static int update_rdl_alloc (flux_t h, int64_t j, JSON o) { int i = 0; int rc = -1; int size = 0; JSON ra_e = NULL; const char *key = NULL; zhash_t *rtab = NULL; int64_t *ncores = NULL; if (!(rtab = zhash_new ())) oom (); if (!Jget_ar_len (o, &size)) goto done; for (i=0; i < (int) size; ++i) { if (!Jget_ar_obj (o, i, &ra_e)) goto done; /* 'o' represents an array of per-node core count to use. * However, becasue the same rank can appear multiple times * in this array in emulation mode, update_hash_1ra is * used to determine the total core count per rank. */ if ( (rc = update_hash_1ra (h, j, ra_e, rtab)) < 0) goto done; } FOREACH_ZHASH (rtab, key, ncores) { if ( (rc = kvs_put_int64 (h, key, *ncores)) < 0) { flux_log_error (h, "put %s", key); goto done; } } if (kvs_commit (h) < 0) { flux_log (h, LOG_ERR, "update_pdesc commit failed"); goto done; } rc = 0; done: zhash_destroy (&rtab); return rc; }