Resolve "`ADM_update_job()` should only allow changing the job resources"

This MR removes the ADM_job_requirements argument from ADM_update_job. By design, job requirements can only be defined when the job submission occurs which means that, as of today, they cannot be changed dynamically. Thus, it doesn't make sense to be able to change them and removing the argument simplifies the daemon.

Closes #89 (closed)

Edited by Alberto Miranda

Merge request reports

Loading
+6 −22
Changes for examples/c/ADM_update_job.c: 6 added lines, 22 removed lines.
Original line number Diff line number Diff line
@@ -99,30 +99,14 @@ main(int argc, char* argv[]) {
        goto cleanup;
    }

    ADM_dataset_t new_inputs[NINPUTS];
    ADM_node_t* new_job_nodes = prepare_nodes(NJOB_NODES * 2);
    assert(new_job_nodes);

    for(int i = 0; i < NINPUTS; ++i) {
        const char* pattern = "input-new-dataset-%d";
        size_t n = snprintf(NULL, 0, pattern, i);
        char* id = (char*) alloca(n + 1);
        snprintf(id, n + 1, pattern, i);
        new_inputs[i] = ADM_dataset_create(id);
    }

    ADM_dataset_t new_outputs[NOUTPUTS];

    for(int i = 0; i < NOUTPUTS; ++i) {
        const char* pattern = "output-new-dataset-%d";
        size_t n = snprintf(NULL, 0, pattern, i);
        char* id = (char*) alloca(n + 1);
        snprintf(id, n + 1, pattern, i);
        new_outputs[i] = ADM_dataset_create(id);
    }

    ADM_job_requirements_t new_reqs = ADM_job_requirements_create(
            new_inputs, NINPUTS, new_outputs, NOUTPUTS, adhoc_storage);
    ADM_job_resources_t new_job_resources =
            ADM_job_resources_create(new_job_nodes, NJOB_NODES * 2);
    assert(job_resources);

    ret = ADM_update_job(server, job, job_resources, new_reqs);
    ret = ADM_update_job(server, job, new_job_resources);

    if(ret != ADM_SUCCESS) {
        fprintf(stderr,
+2 −3
Changes for examples/cxx/ADM_update_job.cpp: 2 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ main(int argc, char* argv[]) {
    admire::server server{"tcp", argv[1]};

    const auto job_nodes = prepare_nodes(NJOB_NODES);
    const auto new_job_nodes = prepare_nodes(NJOB_NODES * 2);
    const auto adhoc_nodes = prepare_nodes(NADHOC_NODES);
    const auto inputs = prepare_datasets("input-dataset-{}", NINPUTS);
    const auto outputs = prepare_datasets("output-dataset-{}", NOUTPUTS);
@@ -60,14 +61,12 @@ main(int argc, char* argv[]) {
    const auto new_outputs =
            prepare_datasets("output-new-dataset-{}", NOUTPUTS);

    admire::job_requirements new_reqs{new_inputs, new_outputs, gkfs_storage};

    try {
        [[maybe_unused]] const auto job = admire::register_job(
                server, admire::job::resources{job_nodes}, reqs, 0);

        [[maybe_unused]] ADM_return_t ret = admire::update_job(
                server, job, admire::job::resources{job_nodes}, new_reqs);
                server, job, admire::job::resources{new_job_nodes});

        fmt::print(
                stdout,
+5 −0
Changes for src/common/api/internal_types.hpp: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -53,6 +53,11 @@ struct job_info {
        return m_requirements;
    }

    void
    update(admire::job::resources resources) {
        m_resources = std::move(resources);
    }

    admire::job m_job;
    std::optional<admire::job::resources> m_resources;
    std::optional<admire::job_requirements> m_requirements;
+0 −1
Changes for src/common/net/proto/rpc_types.h: 0 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -310,7 +310,6 @@ MERCURY_GEN_PROC(
    ADM_update_job_in_t,
        ((ADM_job_t) (job))
        ((ADM_job_resources_t) (job_resources))
        ((adm_job_requirements) (reqs))
);

MERCURY_GEN_PROC(
+4 −7
Changes for src/lib/detail/impl.cpp: 4 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -241,7 +241,7 @@ register_job(const server& srv, const job::resources& job_resources,

admire::error_code
update_job(const server& srv, const job& job,
           const job::resources& job_resources, const job_requirements& reqs) {
           const job::resources& job_resources) {

    scord::network::rpc_client rpc_client{srv.protocol(), rpc_registration_cb};

@@ -249,17 +249,14 @@ update_job(const server& srv, const job& job,
    auto endp = rpc_client.lookup(srv.address());

    LOGGER_INFO("rpc id: {} name: {} from: {} => "
                "body: {{job: {}, job_resources: {}, job_requirements: {}}}",
                "body: {{job: {}, job_resources: {}}}",
                rpc_id, std::quoted("ADM_"s + __FUNCTION__),
                std::quoted(rpc_client.self_address()), job, job_resources,
                reqs);
                std::quoted(rpc_client.self_address()), job, job_resources);

    const auto rpc_job = api::convert(job);
    const auto rpc_job_resources = api::convert(job_resources);
    const auto rpc_reqs = api::convert(reqs);

    ADM_update_job_in_t in{rpc_job.get(), rpc_job_resources.get(),
                           *rpc_reqs.get()};
    ADM_update_job_in_t in{rpc_job.get(), rpc_job_resources.get()};
    ADM_update_job_out_t out;

    const auto rpc = endp.call("ADM_update_job", &in, &out);
Loading
Loading