diff --git a/.mergify.yml b/.mergify.yml index 8cdf97fb8..451cab4b4 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -6,8 +6,8 @@ queue_rules: - status-success="spelling" - status-success="python format" - status-success="python lint" - - status-success="bookworm - gcc-8,distcheck" - - status-success="bookworm - clang-6.0" + - status-success="bookworm - gcc-12,distcheck" + - status-success="bookworm - clang-15" - status-success="bookworm - test-install" - status-success="focal" - status-success="el8" diff --git a/configure.ac b/configure.ac index c6218f179..d2dbd5b3d 100644 --- a/configure.ac +++ b/configure.ac @@ -188,7 +188,11 @@ AC_CONFIG_FILES([Makefile src/shell/Makefile resource/Makefile resource/planner/Makefile + resource/planner/c/Makefile + resource/planner/c++/Makefile resource/planner/test/Makefile + resource/schema/Makefile + resource/schema/test/Makefile resource/evaluators/Makefile resource/evaluators/test/Makefile resource/libjobspec/Makefile diff --git a/resource/.gitignore b/resource/.gitignore index 785f37961..d4ca2a927 100644 --- a/resource/.gitignore +++ b/resource/.gitignore @@ -2,5 +2,7 @@ evaluators/test/expr_eval_test01 libjobspec/flux-jobspec-validate planner/test/planner_test01 planner/test/planner_test02 +schema/test/schema_test01 +schema/test/schema_test02 utilities/grug2dot utilities/resource-query diff --git a/resource/Makefile.am b/resource/Makefile.am index 26c552eaa..d57d2ac9a 100644 --- a/resource/Makefile.am +++ b/resource/Makefile.am @@ -7,7 +7,8 @@ AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) AM_CPPFLAGS = -I$(top_srcdir) $(CZMQ_CFLAGS) $(FLUX_CORE_CFLAGS) \ $(BOOST_CPPFLAGS) -SUBDIRS = libjobspec planner . utilities modules reapi evaluators policies +SUBDIRS = libjobspec planner . utilities modules reapi evaluators \ + policies schema noinst_LTLIBRARIES = libresource.la @@ -81,7 +82,7 @@ libresource_la_SOURCES = \ config/system_defaults.hpp \ writers/match_writers.hpp \ store/resource_graph_store.hpp \ - planner/planner.h + planner/c/planner.h libresource_la_CXXFLAGS = \ $(WARNING_CXXFLAGS) \ @@ -91,7 +92,7 @@ libresource_la_CXXFLAGS = \ $(FLUX_IDSET_CFLAGS) libresource_la_LIBADD = \ - $(top_builddir)/resource/planner/libplanner.la \ + $(top_builddir)/resource/planner/c/libplanner.la \ $(top_builddir)/resource/libjobspec/libjobspec_conv.la \ $(FLUX_HOSTLIST_LIBS) \ $(FLUX_IDSET_LIBS) \ diff --git a/resource/modules/resource_match.cpp b/resource/modules/resource_match.cpp index 894f8bcee..60027c015 100644 --- a/resource/modules/resource_match.cpp +++ b/resource/modules/resource_match.cpp @@ -2517,7 +2517,8 @@ static void ns_info_request_cb (flux_t *h, flux_msg_handler_t *w, flux_log_error (h, "%s: namespace_remapper.query", __FUNCTION__); goto error; } - if (remapped_id > std::numeric_limits::max ()) { + if (remapped_id > + static_cast (std::numeric_limits::max ())) { errno = EOVERFLOW; flux_log_error (h, "%s: remapped id too large", __FUNCTION__); goto error; diff --git a/resource/planner/Makefile.am b/resource/planner/Makefile.am index 1a4228d34..0cf4d00e4 100644 --- a/resource/planner/Makefile.am +++ b/resource/planner/Makefile.am @@ -1,39 +1,2 @@ -AM_CFLAGS = \ - $(WARNING_CFLAGS) \ - $(CODE_COVERAGE_CFLAGS) - -AM_CPPFLAGS = \ - -I$(top_srcdir) \ - $(CZMQ_CFLAGS) - -AM_LDFLAGS = \ - $(CODE_COVERAGE_LDFLAGS) - -SUBDIRS = . test - -noinst_LTLIBRARIES = libplanner.la -noinst_HEADERS = \ - planner.h \ - planner_multi.h \ - planner_internal_tree.hpp \ - scheduled_point_tree.hpp \ - mintime_resource_tree.hpp \ - $(top_srcdir)/src/common/yggdrasil/bst.hpp \ - $(top_srcdir)/src/common/yggdrasil/bst.cpp \ - $(top_srcdir)/src/common/yggdrasil/debug.hpp \ - $(top_srcdir)/src/common/yggdrasil/options.hpp \ - $(top_srcdir)/src/common/yggdrasil/rbtree.hpp \ - $(top_srcdir)/src/common/yggdrasil/rbtree.cpp \ - $(top_srcdir)/src/common/yggdrasil/size_holder.hpp \ - $(top_srcdir)/src/common/yggdrasil/tree_iterator.hpp \ - $(top_srcdir)/src/common/yggdrasil/tree_iterator.cpp \ - $(top_srcdir)/src/common/yggdrasil/util.hpp - -libplanner_la_SOURCES = \ - planner.cpp \ - planner_multi.cpp \ - scheduled_point_tree.cpp \ - mintime_resource_tree.cpp - -libplanner_la_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/resource/planner +SUBDIRS = test c++ c diff --git a/resource/planner/c++/Makefile.am b/resource/planner/c++/Makefile.am new file mode 100644 index 000000000..fbd0ceba9 --- /dev/null +++ b/resource/planner/c++/Makefile.am @@ -0,0 +1,41 @@ +SUBDIRS = . + +AM_CFLAGS = \ + $(WARNING_CFLAGS) \ + $(CODE_COVERAGE_CFLAGS) + +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + $(CZMQ_CFLAGS) + +AM_LDFLAGS = \ + $(CODE_COVERAGE_LDFLAGS) + +noinst_LTLIBRARIES = libplanner_cxx.la +noinst_HEADERS = \ + planner.hpp \ + planner_multi.hpp \ + planner_internal_tree.hpp \ + scheduled_point_tree.hpp \ + mintime_resource_tree.hpp \ + $(top_srcdir)/src/common/yggdrasil/bst.hpp \ + $(top_srcdir)/src/common/yggdrasil/bst.cpp \ + $(top_srcdir)/src/common/yggdrasil/debug.hpp \ + $(top_srcdir)/src/common/yggdrasil/options.hpp \ + $(top_srcdir)/src/common/yggdrasil/rbtree.hpp \ + $(top_srcdir)/src/common/yggdrasil/rbtree.cpp \ + $(top_srcdir)/src/common/yggdrasil/size_holder.hpp \ + $(top_srcdir)/src/common/yggdrasil/tree_iterator.hpp \ + $(top_srcdir)/src/common/yggdrasil/tree_iterator.cpp \ + $(top_srcdir)/src/common/yggdrasil/util.hpp + +libplanner_cxx_la_SOURCES = \ + planner.cpp \ + planner_multi.cpp \ + scheduled_point_tree.cpp \ + mintime_resource_tree.cpp + +libplanner_cxx_la_CFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/resource/planner/c++ + +libplanner_cxx_la_CXXFLAGS = $(AM_CFLAGS) -I$(top_srcdir)/resource/planner/c++ + diff --git a/resource/planner/mintime_resource_tree.cpp b/resource/planner/c++/mintime_resource_tree.cpp similarity index 97% rename from resource/planner/mintime_resource_tree.cpp rename to resource/planner/c++/mintime_resource_tree.cpp index d6bb3d440..d38b3f72c 100644 --- a/resource/planner/mintime_resource_tree.cpp +++ b/resource/planner/c++/mintime_resource_tree.cpp @@ -26,7 +26,7 @@ extern "C" { * * *******************************************************************************/ -int64_t mintime_resource_tree_t::right_branch_mintime (mt_resource_rb_node_t *n) +int64_t mintime_resource_tree_t::right_branch_mintime (mt_resource_rb_node_t *n) const { int64_t min_time = std::numeric_limits::max (); mt_resource_rb_node_t *right = n->get_right (); @@ -36,7 +36,7 @@ int64_t mintime_resource_tree_t::right_branch_mintime (mt_resource_rb_node_t *n) } scheduled_point_t *mintime_resource_tree_t::find_mintime_point ( - mt_resource_rb_node_t *anchor, int64_t min_time) + mt_resource_rb_node_t *anchor, int64_t min_time) const { if (!anchor) return nullptr; @@ -62,7 +62,7 @@ scheduled_point_t *mintime_resource_tree_t::find_mintime_point ( } int64_t mintime_resource_tree_t::find_mintime_anchor ( - int64_t request, mt_resource_rb_node_t **anchor_p) + int64_t request, mt_resource_rb_node_t **anchor_p) const { mt_resource_rb_node_t *node = m_tree.get_root (); int64_t min_time = std::numeric_limits::max (); @@ -144,7 +144,6 @@ template void mt_resource_node_traits::leaf_inserted ( mt_resource_rb_node_t &node, BaseTree &tree) { - scheduled_point_t *p = node.get_point (); node.subtree_min = node.at; mt_resource_rb_node_t *n = &node; while ( (n = n->get_parent ()) != nullptr @@ -240,13 +239,18 @@ int mintime_resource_tree_t::remove (scheduled_point_t *point) return 0; } -scheduled_point_t *mintime_resource_tree_t::get_mintime (int64_t request) +scheduled_point_t *mintime_resource_tree_t::get_mintime (int64_t request) const { mt_resource_rb_node_t *anchor = nullptr; int64_t min_time = find_mintime_anchor (request, &anchor); return find_mintime_point (anchor, min_time); } +void mintime_resource_tree_t::clear () +{ + m_tree.clear (); +} + /* * vi: ts=4 sw=4 expandtab */ diff --git a/resource/planner/mintime_resource_tree.hpp b/resource/planner/c++/mintime_resource_tree.hpp similarity index 90% rename from resource/planner/mintime_resource_tree.hpp rename to resource/planner/c++/mintime_resource_tree.hpp index 750a25bab..cd74dd36d 100644 --- a/resource/planner/mintime_resource_tree.hpp +++ b/resource/planner/c++/mintime_resource_tree.hpp @@ -15,7 +15,7 @@ #include "src/common/yggdrasil/rbtree.hpp" struct scheduled_point_t; -struct rb_node_base_t; +class rb_node_base_t; struct mt_resource_rb_node_t : public rb_node_base_t, @@ -59,14 +59,16 @@ class mintime_resource_tree_t { public: int insert (scheduled_point_t *point); int remove (scheduled_point_t *point); - scheduled_point_t *get_mintime (int64_t request); + scheduled_point_t *get_mintime (int64_t request) const; + void clear (); private: - int64_t right_branch_mintime (mt_resource_rb_node_t *n); + int64_t right_branch_mintime (mt_resource_rb_node_t *n) const; scheduled_point_t *find_mintime_point (mt_resource_rb_node_t *anchor, - int64_t min_time); + int64_t min_time) const; int64_t find_mintime_anchor (int64_t request, - mt_resource_rb_node_t **anchor_p); + mt_resource_rb_node_t **anchor_p) const; + mt_resource_rb_tree_t m_tree; }; diff --git a/resource/planner/c++/planner.cpp b/resource/planner/c++/planner.cpp new file mode 100644 index 000000000..87e2166d1 --- /dev/null +++ b/resource/planner/c++/planner.cpp @@ -0,0 +1,573 @@ +/*****************************************************************************\ + * Copyright 2023 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\*****************************************************************************/ + +extern "C" { +#if HAVE_CONFIG_H +#include "config.h" +#endif +} + +#include +#include +#include + +#include "planner.hpp" + + +/**************************************************************************** + * * + * Public Planner Methods * + * * + ****************************************************************************/ + +planner::planner () = default; + +planner::planner (const int64_t base_time, const uint64_t duration, + const uint64_t resource_totals, const char *in_resource_type) +{ + m_total_resources = static_cast (resource_totals); + m_resource_type = in_resource_type; + m_plan_start = base_time; + m_plan_end = base_time + static_cast (duration); + m_p0 = new scheduled_point_t (); + m_p0->in_mt_resource_tree = 0; + m_p0->new_point = 1; + m_p0->at = base_time; + m_p0->ref_count = 1; + m_p0->remaining = m_total_resources; + m_sched_point_tree.insert (m_p0); + m_mt_resource_tree.insert (m_p0); + m_avail_time_iter_set = 0; + m_span_counter = 0; +} + +planner::planner (const planner &o) +{ + int rc = -1; + // Important: need to copy trees first, + // since map copies fetch the scheduled + // points inserted into the trees. + if ( (rc = copy_trees (o)) < 0) { + throw std::runtime_error ("ERROR copying trees\n"); + } + if ( (rc = copy_maps (o)) < 0) { + throw std::runtime_error ("ERROR copying maps\n"); + } + + m_total_resources = o.m_total_resources; + m_resource_type = o.m_resource_type; + m_plan_start = o.m_plan_start; + m_plan_end = o.m_plan_end; + m_current_request = o.m_current_request; + m_avail_time_iter_set = o.m_avail_time_iter_set; + m_span_counter = o.m_span_counter; + // After above copy the SP tree now has the full state of the base point. + m_p0 = m_sched_point_tree.get_state (m_plan_start); +} + +planner &planner::operator= (const planner &o) +{ + int rc = -1; + + if ( (rc = erase ()) != 0) { + throw std::runtime_error ("ERROR erasing *this\n"); + } + // Important: need to copy trees first, + // since map copies fetch the scheduled + // points inserted into the trees. + if ( (rc = copy_trees (o)) != 0) { + throw std::runtime_error ("ERROR copying trees to *this\n"); + } + if ( (rc = copy_maps (o)) != 0) { + throw std::runtime_error ("ERROR copying maps to *this\n"); + } + + m_total_resources = o.m_total_resources; + m_resource_type = o.m_resource_type; + m_plan_start = o.m_plan_start; + m_plan_end = o.m_plan_end; + m_current_request = o.m_current_request; + m_avail_time_iter_set = o.m_avail_time_iter_set; + m_span_counter = o.m_span_counter; + // After above copy the SP tree now has the full state of the base point. + m_p0 = m_sched_point_tree.get_state (m_plan_start); + + return *this; +} + +bool planner::operator== (const planner &o) const +{ + if (m_total_resources != o.m_total_resources) + return false; + if (m_resource_type != o.m_resource_type) + return false; + if (m_plan_start != o.m_plan_start) + return false; + if (m_plan_end != o.m_plan_end) + return false; + if (m_avail_time_iter_set != o.m_avail_time_iter_set) + return false; + if (m_span_counter != o.m_span_counter) + return false; + // m_p0 or o.m_p0 could be uninitialized + if (m_p0 && o.m_p0) { + if (!scheduled_points_equal (*m_p0, *(o.m_p0))) + return false; + } else if (m_p0 || o.m_p0) { + return false; + } // else both nullptr + if (!span_lookups_equal (o)) + return false; + if (!avail_time_iters_equal (o)) + return false; + if (!trees_equal (o)) + return false; + return true; +} + +planner::~planner () +{ + // Destructor is nothrow + // The destroy function called in the + // scheduled point tree deletes all scheduled + // points (including m_p0) + // inserted in the class ctor + // or reinitialize. + erase (); +} + +int planner::erase () +{ + int rc = 0; + + // returns 0 or a negative number + rc = restore_track_points (); + m_span_lookup.clear (); + if (m_p0 && m_p0->in_mt_resource_tree) + rc += m_mt_resource_tree.remove (m_p0); + m_sched_point_tree.destroy (); + m_mt_resource_tree.clear (); + + return rc; +} + +int planner::reinitialize (int64_t base_time, uint64_t duration) +{ + int rc = 0; + + m_plan_start = base_time; + m_plan_end = base_time + static_cast (duration); + m_p0 = new scheduled_point_t (); + m_p0->at = base_time; + m_p0->ref_count = 1; + m_p0->remaining = m_total_resources; + // returns 0 or -1 + rc = m_sched_point_tree.insert (m_p0); + // returns 0 or -1 + rc += m_mt_resource_tree.insert (m_p0); + m_avail_time_iter_set = 0; + m_span_counter = 0; + + return rc; +} + +int planner::restore_track_points () +{ + int rc = 0; + + if (!m_avail_time_iter.empty ()) { + for (auto &kv : m_avail_time_iter) { + // returns 0 or -1 + rc += m_mt_resource_tree.insert (kv.second); + } + } + m_avail_time_iter.clear (); + + return rc; +} + +int64_t planner::get_total_resources () const +{ + return m_total_resources; +} + +const std::string &planner::get_resource_type () const +{ + return m_resource_type; +} + +int64_t planner::get_plan_start () const +{ + return m_plan_start; +} + +int64_t planner::get_plan_end () const +{ + return m_plan_end; +} + +int planner::mt_tree_insert (scheduled_point_t *point) +{ + return m_mt_resource_tree.insert (point); +} + +int planner::mt_tree_remove (scheduled_point_t *point) +{ + return m_mt_resource_tree.remove (point); +} + +int planner::sp_tree_insert (scheduled_point_t *point) +{ + return m_sched_point_tree.insert (point); +} + +int planner::sp_tree_remove (scheduled_point_t *point) +{ + return m_sched_point_tree.remove (point); +} + +void planner::destroy_sp_tree () +{ + m_sched_point_tree.destroy (); +} + +scheduled_point_t *planner::sp_tree_search (int64_t at) +{ + return m_sched_point_tree.search (at); +} + +scheduled_point_t *planner::sp_tree_get_state (int64_t at) +{ + return m_sched_point_tree.get_state (at); +} + +scheduled_point_t *planner::sp_tree_next (scheduled_point_t *point) const +{ + return m_sched_point_tree.next (point); +} + +scheduled_point_t *planner::mt_tree_get_mintime (int64_t request) const +{ + return m_mt_resource_tree.get_mintime (request); +} + +void planner::clear_span_lookup () +{ + m_span_lookup.clear (); +} + +void planner::span_lookup_erase (std::map>::iterator &it) +{ + m_span_lookup.erase (it); +} + +const std::map> + &planner::get_span_lookup_const () const +{ + return m_span_lookup; +} + +std::map> &planner::get_span_lookup () +{ + return m_span_lookup; +} + +size_t planner::span_lookup_get_size () const +{ + return m_span_lookup.size (); +} + +void planner::span_lookup_insert (int64_t span_id, + std::shared_ptr span) +{ + m_span_lookup.insert (std::pair> (span_id, + span)); +} + +void planner::set_span_lookup_iter (std::map>::iterator &it) +{ + m_span_lookup_iter = it; +} + +const std::map>::iterator + planner::get_span_lookup_iter () const +{ + return m_span_lookup_iter; +} + +void planner::incr_span_lookup_iter () +{ + m_span_lookup_iter++; +} + +std::map &planner::get_avail_time_iter () +{ + return m_avail_time_iter; +} + +const std::map + &planner::get_avail_time_iter_const () const +{ + return m_avail_time_iter; +} + +void planner::clear_avail_time_iter () +{ + m_avail_time_iter.clear (); +} + +void planner::set_avail_time_iter_set (int atime_iter_set) +{ + m_avail_time_iter_set = atime_iter_set; +} + +const int planner::get_avail_time_iter_set () const +{ + return m_avail_time_iter_set; +} + +request_t &planner::get_current_request () +{ + return m_current_request; +} + +const request_t &planner::get_current_request_const () const +{ + return m_current_request; +} + +void planner::incr_span_counter () +{ + m_span_counter++; +} + +const uint64_t planner::get_span_counter () const +{ + return m_span_counter; +} + +/**************************************************************************** + * * + * Private Planner Methods * + * * + ****************************************************************************/ + +int planner::copy_trees (const planner &o) +{ + int rc = 0; + + // Incoming planner could be empty. + if (!o.m_sched_point_tree.empty ()) { + // Need to get the state at plan_start, not just m_p0 since they could + // have diverged after scheduling. + scheduled_point_t *point = o.m_sched_point_tree.get_state (o.m_plan_start); + scheduled_point_t *new_point = nullptr; + while (point) { + new_point = new scheduled_point_t (); + new_point->at = point->at; + new_point->in_mt_resource_tree = point->in_mt_resource_tree; + new_point->new_point = point->new_point; + new_point->ref_count = point->ref_count; + new_point->scheduled = point->scheduled; + new_point->remaining = point->remaining; + if ( (rc = m_sched_point_tree.insert (new_point)) != 0) + return rc; + if ( (rc = m_mt_resource_tree.insert (new_point)) != 0) + return rc; + point = o.m_sched_point_tree.next (point); + } + } else { + // Erase if incoming planner is empty. + rc = erase (); + } + return rc; +} + +int planner::copy_maps (const planner &o) +{ + int rc = 0; + + if (!o.m_span_lookup.empty ()) { + for (auto const &span_it : o.m_span_lookup) { + std::shared_ptr new_span = std::make_shared (); + // Need to deep copy spans, else copies of planners will share + // pointers. + new_span->start = span_it.second->start; + new_span->last = span_it.second->last; + new_span->span_id = span_it.second->span_id; + new_span->planned = span_it.second->planned; + new_span->in_system = span_it.second->in_system; + new_span->start_p = m_sched_point_tree.get_state (new_span->start); + new_span->last_p = m_sched_point_tree.get_state (new_span->last); + m_span_lookup[span_it.first] = new_span; + } + } else { + m_span_lookup.clear (); + } + if (!o.m_avail_time_iter.empty ()) { + for (auto const &avail_it : o.m_avail_time_iter) { + // Scheduled point already copied into trees, so fetch + // from SP tree. + scheduled_point_t *new_avail = + m_sched_point_tree.get_state (avail_it.second->at); + m_avail_time_iter[avail_it.first] = new_avail; + } + } else { + m_avail_time_iter.clear (); + } + + return rc; +} + +bool planner::scheduled_points_equal (const scheduled_point_t &lhs, + const scheduled_point_t &rhs) const +{ + if (lhs.at != rhs.at) + return false; + if (lhs.in_mt_resource_tree != rhs.in_mt_resource_tree) + return false; + if (lhs.new_point != rhs.new_point) + return false; + if (lhs.ref_count != rhs.ref_count) + return false; + if (lhs.remaining != rhs.remaining) + return false; + if (lhs.scheduled != rhs.scheduled) + return false; + + return true; +} + +bool planner::span_lookups_equal (const planner &o) const +{ + if (m_span_lookup.size () != o.m_span_lookup.size ()) + return false; + if (!m_span_lookup.empty ()) { + // Iterate through indices to use the auto range-based for loop + // semantics; otherwise need to create a "zip" function for two maps. + for (auto const &this_it : m_span_lookup) { + auto const other = o.m_span_lookup.find (this_it.first); + if (other == o.m_span_lookup.end ()) + return false; + if (this_it.first != other->first) + return false; + if (this_it.second->start != other->second->start) + return false; + if (this_it.second->last != other->second->last) + return false; + if (this_it.second->span_id != other->second->span_id) + return false; + if (this_it.second->planned != other->second->planned) + return false; + if (this_it.second->in_system != other->second->in_system) + return false; + if (this_it.second->in_system != other->second->in_system) + return false; + if (!scheduled_points_equal (*(this_it.second->start_p), + *(other->second->start_p))) + return false; + if (!scheduled_points_equal (*(this_it.second->last_p), + *(other->second->last_p))) + return false; + } + } + return true; +} + +bool planner::avail_time_iters_equal (const planner &o) const +{ + if (m_avail_time_iter.size () != o.m_avail_time_iter.size ()) + return false; + if (!m_avail_time_iter.empty ()) { + // Iterate through indices to use the auto range-based for loop + // semantics; otherwise need to create a "zip" function for two maps. + for (auto const &this_it : m_avail_time_iter) { + auto const other = o.m_avail_time_iter.find (this_it.first); + if (other == o.m_avail_time_iter.end ()) + return false; + if (this_it.first != other->first) + return false; + if (this_it.second && other->second) { + if (!scheduled_points_equal (*(this_it.second), + *(other->second))) + return false; + } else if (this_it.second || other->second) { + return false; + } + } + } + return true; +} + +bool planner::trees_equal (const planner &o) const +{ + if (m_sched_point_tree.get_size () != o.m_sched_point_tree.get_size ()) + return false; + if (!m_sched_point_tree.empty ()) { + scheduled_point_t *this_pt = + m_sched_point_tree.get_state (m_plan_start); + scheduled_point_t *o_pt = + o.m_sched_point_tree.get_state (o.m_plan_start); + while (this_pt) { + if (!scheduled_points_equal (*this_pt, *o_pt)) + return false; + this_pt = m_sched_point_tree.next (this_pt); + o_pt = o.m_sched_point_tree.next (o_pt); + } + } + return true; +} + +/**************************************************************************** + * * + * Public Planner_t methods * + * * + ****************************************************************************/ + +planner_t::planner_t () +{ + try { + plan = new planner (); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } +} + +planner_t::planner_t (const planner &o) +{ + try { + plan = new planner (o); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } +} + +planner_t::planner_t (const int64_t base_time, const uint64_t duration, + const uint64_t resource_totals, + const char *in_resource_type) +{ + try { + plan = new planner (base_time, duration, resource_totals, + in_resource_type); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } +} + +planner_t::~planner_t () +{ + delete plan; +} + +/* + * vi: ts=4 sw=4 expandtab + */ diff --git a/resource/planner/c++/planner.hpp b/resource/planner/c++/planner.hpp new file mode 100644 index 000000000..716091e0b --- /dev/null +++ b/resource/planner/c++/planner.hpp @@ -0,0 +1,132 @@ +/*****************************************************************************\ + * Copyright 2023 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\*****************************************************************************/ + +#ifndef PLANNER_HPP +#define PLANNER_HPP + +#include +#include "planner_internal_tree.hpp" + +struct request_t { + int64_t on_or_after; + uint64_t duration; + int64_t count; +}; + +/*! Node in a span interval tree to enable fast retrieval of intercepting spans. + */ +struct span_t { + int64_t start; /* start time of the span */ + int64_t last; /* end time of the span */ + int64_t span_id; /* unique span id */ + int64_t planned; /* required resource quantity */ + int in_system; /* 1 when inserted into the system */ + scheduled_point_t *start_p; /* scheduled point object at start */ + scheduled_point_t *last_p; /* scheduled point object at last */ +}; + +/*! Planner class + */ +class planner { +public: + planner (); + planner (const int64_t base_time, const uint64_t duration, + const uint64_t resource_totals, const char *in_resource_type); + planner (const planner &o); + planner &operator= (const planner &o); + bool operator== (const planner &o) const; + ~planner (); + // Public class utilities + int erase (); + int reinitialize (int64_t base_time, uint64_t duration); + int restore_track_points (); + + // Resources and duration + int64_t get_total_resources () const; + const std::string &get_resource_type () const; + int64_t get_plan_start () const; + int64_t get_plan_end () const; + // RBTree functions + int mt_tree_insert (scheduled_point_t *point); + int mt_tree_remove (scheduled_point_t *point); + int sp_tree_insert (scheduled_point_t *point); + int sp_tree_remove (scheduled_point_t *point); + void destroy_sp_tree (); + scheduled_point_t *sp_tree_search (int64_t at); + scheduled_point_t *sp_tree_get_state (int64_t at); + scheduled_point_t *sp_tree_next (scheduled_point_t *point) const; + scheduled_point_t *mt_tree_get_mintime (int64_t request) const; + // Span lookup functions + void clear_span_lookup (); + void span_lookup_erase (std::map>::iterator &it); + const std::map> + &get_span_lookup_const () const; + std::map> &get_span_lookup (); + size_t span_lookup_get_size () const; + void span_lookup_insert (int64_t span_id, std::shared_ptr span); + const std::map>::iterator + get_span_lookup_iter () const; + void set_span_lookup_iter (std::map>::iterator &it); + void incr_span_lookup_iter (); + // Avail_time functions + std::map &get_avail_time_iter (); + const std::map + &get_avail_time_iter_const () const; + void clear_avail_time_iter (); + void set_avail_time_iter_set (int atime_iter_set); + const int get_avail_time_iter_set () const; + // Request functions + request_t &get_current_request (); + const request_t &get_current_request_const () const; + // Span counter functions + void incr_span_counter (); + const uint64_t get_span_counter () const; + +private: + int64_t m_total_resources = 0; + std::string m_resource_type = ""; + int64_t m_plan_start = 0; /* base time of the planner */ + int64_t m_plan_end = 0; /* end time of the planner */ + scheduled_point_tree_t m_sched_point_tree; /* scheduled point rb tree */ + mintime_resource_tree_t m_mt_resource_tree; /* min-time resource rb tree */ + scheduled_point_t *m_p0 = nullptr; /* system's scheduled point at base time */ + std::map > m_span_lookup; /* span lookup */ + std::map >::iterator m_span_lookup_iter; + std::map m_avail_time_iter; /* MT node track */ + int m_avail_time_iter_set = 0; /* iterator set flag */ + request_t m_current_request; /* the req copy for avail time iteration */ + uint64_t m_span_counter = 0; /* current span counter */ + // Private class utilities + int copy_trees (const planner &o); + int copy_maps (const planner &o); + bool scheduled_points_equal (const scheduled_point_t &lhs, + const scheduled_point_t &rhs) const; + bool span_lookups_equal (const planner &o) const; + bool avail_time_iters_equal (const planner &o) const; + bool trees_equal (const planner &o) const; +}; + +struct planner_t { + planner_t (); + planner_t (const planner &o); + planner_t (const int64_t base_time, const uint64_t duration, + const uint64_t resource_totals, const char *in_resource_type); + ~planner_t (); + + planner *plan = nullptr; +}; + +#endif /* PLANNER_HPP */ + +/* + * vi: ts=4 sw=4 expandtab + */ diff --git a/resource/planner/planner_internal_tree.hpp b/resource/planner/c++/planner_internal_tree.hpp similarity index 100% rename from resource/planner/planner_internal_tree.hpp rename to resource/planner/c++/planner_internal_tree.hpp diff --git a/resource/planner/c++/planner_multi.cpp b/resource/planner/c++/planner_multi.cpp new file mode 100644 index 000000000..ff7c1966b --- /dev/null +++ b/resource/planner/c++/planner_multi.cpp @@ -0,0 +1,342 @@ +/*****************************************************************************\ + * Copyright 2023 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\*****************************************************************************/ + +extern "C" { +#if HAVE_CONFIG_H +#include "config.h" +#endif +} + +#include +#include +#include +#include +#include + +#include "planner_multi.hpp" + +/**************************************************************************** + * * + * Public Planner Multi Methods * + * * + ****************************************************************************/ + +planner_multi::planner_multi () = default; + +planner_multi::planner_multi (int64_t base_time, uint64_t duration, + const uint64_t *resource_totals, + const char **resource_types, size_t len) +{ + size_t i = 0; + char *type = nullptr; + planner_t *p = nullptr; + + m_iter.on_or_after = 0; + m_iter.duration = 0; + for (i = 0; i < len; ++i) { + m_resource_totals.push_back (resource_totals[i]); + if ( (type = strdup (resource_types[i])) == nullptr) { + errno = ENOMEM; + throw std::runtime_error ("ERROR in strdup\n"); + } + m_resource_types.push_back (type); + m_iter.counts.push_back (0); + try { + p = new planner_t (base_time, duration, + resource_totals[i], + resource_types[i]); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + if (p == nullptr) + throw std::runtime_error ("ERROR in planner_multi ctor\n"); + m_planners.push_back (p); + } + m_span_counter = 0; + +} + +planner_multi::planner_multi (const planner_multi &o) +{ + for (size_t i = 0; i < o.m_planners.size (); ++i) { + planner_t *np = nullptr; + if (o.m_planners[i]) { + try { + np = new planner_t (*(o.m_planners[i]->plan)); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + if (np == nullptr) + throw std::runtime_error ("ERROR in planner_copy\n"); + } else { + try { + np = new planner_t (); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + if (np == nullptr) + throw std::runtime_error ("ERROR in planner_new_empty\n"); + } + m_planners.push_back (np); + } + char *type = nullptr; + for (size_t i = 0; i < o.m_resource_types.size (); ++i) { + if ( (type = strdup (o.m_resource_types[i])) == nullptr) { + errno = ENOMEM; + throw std::runtime_error ("ERROR in strdup; ctor\n"); + } + m_resource_types.push_back (type); + } + m_resource_totals = o.m_resource_totals; + m_span_lookup = o.m_span_lookup; + m_iter = o.m_iter; + m_span_lookup_iter = o.m_span_lookup_iter; + m_span_counter = o.m_span_counter; +} + +planner_multi &planner_multi::operator= (const planner_multi &o) +{ + // Erase *this so the vectors are empty + erase (); + + for (size_t i = 0; i < o.m_planners.size (); ++i) { + planner_t *np = nullptr; + if (o.m_planners[i]) { + try { + // Invoke copy constructor to avoid the assignment + // overload erase () penalty. + np = new planner_t (*(o.m_planners[i]->plan)); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + if (np == nullptr) + throw std::runtime_error ("ERROR in planner_copy\n"); + } else { + try { + np = new planner_t (); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + if (np == nullptr) + throw std::runtime_error ("ERROR in planner_new_empty\n"); + } + m_planners.push_back (np); + } + char *type = nullptr; + for (size_t i = 0; i < o.m_resource_types.size (); ++i) { + if ( (type = strdup (o.m_resource_types[i])) == nullptr) { + errno = ENOMEM; + throw std::runtime_error ("ERROR in strdup; assn overload\n"); + } + m_resource_types.push_back (type); + } + m_resource_totals = o.m_resource_totals; + m_span_lookup = o.m_span_lookup; + m_iter = o.m_iter; + m_span_lookup_iter = o.m_span_lookup_iter; + m_span_counter = o.m_span_counter; + + return *this; +} + +bool planner_multi::operator== (const planner_multi &o) const +{ + if (m_span_counter != o.m_span_counter) + return false; + if (m_resource_totals != o.m_resource_totals) + return false; + if (m_span_lookup != o.m_span_lookup) + return false; + if (m_iter.on_or_after != o.m_iter.on_or_after) + return false; + if (m_iter.duration != o.m_iter.duration) + return false; + if (m_iter.counts != o.m_iter.counts) + return false; + + if (m_resource_types.size () != o.m_resource_types.size ()) + return false; + for (size_t i = 0; i < m_resource_types.size (); ++i) { + if (strcmp (m_resource_types[i], o.m_resource_types[i]) != 0) + return false; + } + + if (m_planners.size () != o.m_planners.size ()) + return false; + for (size_t i = 0; i < m_planners.size (); ++i) { + if (!(*(m_planners[i]->plan) == *(o.m_planners[i]->plan))) + return false; + } + + return true; +} + +void planner_multi::erase () +{ + if (!m_planners.empty ()) { + size_t i = 0; + for (i = 0; i < m_planners.size (); ++i) { + if (m_planners[i]) { + delete m_planners[i]; + m_planners[i] = nullptr; + } + } + } + if (!m_resource_types.empty ()) { + size_t i = 0; + for (i = 0; i < m_resource_types.size (); ++i) { + if (m_resource_types[i]) { + free ((void *)m_resource_types[i]); + m_resource_types[i] = nullptr; + } + } + } + m_planners.clear (); + m_resource_types.clear (); + m_resource_totals.clear (); + m_span_lookup.clear (); +} + +planner_multi::~planner_multi () +{ + erase (); +} + +planner_t *planner_multi::get_planners_at (size_t i) +{ + return m_planners.at (i); +} + +std::vector &planner_multi::get_planners () +{ + return m_planners; +} + +size_t planner_multi::get_planners_size () +{ + return m_planners.size (); +} + +void planner_multi::resource_totals_push_back (const uint64_t resource_total) +{ + m_resource_totals.push_back (resource_total); +} + +uint64_t planner_multi::get_resource_totals_at (size_t i) +{ + return m_resource_totals.at (i); +} + +void planner_multi::resource_types_push_back (const char * resource_type) +{ + m_resource_types.push_back (resource_type); +} + +const std::vector planner_multi::get_resource_types () +{ + return m_resource_types; +} + +const char *planner_multi::get_resource_types_at (size_t i) +{ + return m_resource_types.at (i); +} + +size_t planner_multi::get_resource_types_size () +{ + return m_resource_types.size (); +} + +struct request_multi &planner_multi::get_iter () +{ + return m_iter; +} + +std::map> &planner_multi::get_span_lookup () +{ + return m_span_lookup; +} + +std::map>::iterator + &planner_multi::get_span_lookup_iter () +{ + return m_span_lookup_iter; +} + +void planner_multi::set_span_lookup_iter (std::map>::iterator &it) +{ + m_span_lookup_iter = it; +} + +void planner_multi::incr_span_lookup_iter () +{ + m_span_lookup_iter++; +} + +uint64_t planner_multi::get_span_counter () +{ + return m_span_counter; +} + +void planner_multi::set_span_counter (uint64_t sc) +{ + m_span_counter = sc; +} + +void planner_multi::incr_span_counter () +{ + m_span_counter++; +} + +/**************************************************************************** + * * + * Public Planner_multi_t methods * + * * + ****************************************************************************/ + +planner_multi_t::planner_multi_t () +{ + try { + plan_multi = new planner_multi (); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } +} + +planner_multi_t::planner_multi_t (const planner_multi &o) +{ + try { + plan_multi = new planner_multi (o); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } +} + +planner_multi_t::planner_multi_t (int64_t base_time, uint64_t duration, + const uint64_t *resource_totals, + const char **resource_types, size_t len) +{ + try { + plan_multi = new planner_multi (base_time, duration, resource_totals, + resource_types, len); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } +} + +planner_multi_t::~planner_multi_t () +{ + delete plan_multi; +} + +/* + * vi: ts=4 sw=4 expandtab + */ diff --git a/resource/planner/c++/planner_multi.hpp b/resource/planner/c++/planner_multi.hpp new file mode 100644 index 000000000..d27122563 --- /dev/null +++ b/resource/planner/c++/planner_multi.hpp @@ -0,0 +1,85 @@ +/*****************************************************************************\ + * Copyright 2023 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\*****************************************************************************/ + +#ifndef PLANNER_MULTI_HPP +#define PLANNER_MULTI_HPP + +#include "planner.hpp" + +struct request_multi { + int64_t on_or_after = 0; + uint64_t duration = 0; + std::vector counts; +}; + +class planner_multi { +public: + planner_multi (); + planner_multi (int64_t base_time, uint64_t duration, + const uint64_t *resource_totals, + const char **resource_types, size_t len); + planner_multi (const planner_multi &o); + planner_multi &operator= (const planner_multi &o); + bool operator== (const planner_multi &o) const; + void erase (); + ~planner_multi (); + + // Public getters and setters + planner_t *get_planners_at (size_t i); + std::vector &get_planners (); + size_t get_planners_size (); + void resource_totals_push_back (const uint64_t resource_total); + uint64_t get_resource_totals_at (size_t i); + void resource_types_push_back (const char * resource_type); + const std::vector get_resource_types (); + const char *get_resource_types_at (size_t i); + size_t get_resource_types_size (); + struct request_multi &get_iter (); + // Span lookup functions + std::map> &get_span_lookup (); + std::map>::iterator + &get_span_lookup_iter (); + void set_span_lookup_iter (std::map>::iterator &it); + void incr_span_lookup_iter (); + // Get and set span_counter + uint64_t get_span_counter (); + void set_span_counter (uint64_t sc); + void incr_span_counter (); + + // These need to be public to pass references, otherwise + // need to pass tmp variables by reference. + std::vector m_resource_types; + std::vector m_resource_totals; + std::vector m_planners; + +private: + struct request_multi m_iter; + std::map> m_span_lookup; + std::map>::iterator m_span_lookup_iter; + uint64_t m_span_counter = 0; +}; + +struct planner_multi_t { + planner_multi_t (); + planner_multi_t (const planner_multi &o); + planner_multi_t (int64_t base_time, uint64_t duration, + const uint64_t *resource_totals, + const char **resource_types, size_t len); + ~planner_multi_t (); + + planner_multi *plan_multi = nullptr; +}; + +#endif /* PLANNER_MULTI_HPP */ + +/* + * vi: ts=4 sw=4 expandtab + */ diff --git a/resource/planner/scheduled_point_tree.cpp b/resource/planner/c++/scheduled_point_tree.cpp similarity index 88% rename from resource/planner/scheduled_point_tree.cpp rename to resource/planner/c++/scheduled_point_tree.cpp index 573dff81b..15f92259c 100644 --- a/resource/planner/scheduled_point_tree.cpp +++ b/resource/planner/c++/scheduled_point_tree.cpp @@ -25,7 +25,7 @@ extern "C" { scheduled_point_t *scheduled_point_tree_t::get_recent_state ( scheduled_point_t *new_point, - scheduled_point_t *old_point) + scheduled_point_t *old_point) const { if (!old_point) return new_point; @@ -40,6 +40,7 @@ void scheduled_point_tree_t::destroy (scheduled_point_rb_node_t *node) destroy (node->get_right ()); scheduled_point_t *data = node->get_point (); delete (data); + data = nullptr; } @@ -98,6 +99,18 @@ scheduled_point_t *scheduled_point_tree_t::next (scheduled_point_t *point) return next_point; } +scheduled_point_t *scheduled_point_tree_t::next (scheduled_point_t *point) const +{ + scheduled_point_t *next_point = nullptr; + auto iter = m_tree.iterator_to (point->point_rb); + if (iter != m_tree.end ()) { + iter++; + if (iter != m_tree.end ()) + next_point = iter->get_point (); + } + return next_point; +} + scheduled_point_t *scheduled_point_tree_t::search (int64_t tm) { auto iter = m_tree.find (tm); @@ -108,7 +121,7 @@ scheduled_point_t *scheduled_point_tree_t::search (int64_t tm) * returns the most recent scheduled point, representing the accurate resource * state at the time t. */ -scheduled_point_t *scheduled_point_tree_t::get_state (int64_t at) +scheduled_point_t *scheduled_point_tree_t::get_state (int64_t at) const { scheduled_point_t *last_state = nullptr; scheduled_point_rb_node_t *node = m_tree.get_root (); @@ -149,6 +162,16 @@ int scheduled_point_tree_t::remove (scheduled_point_t *point) return 0; } +bool scheduled_point_tree_t::empty () const +{ + return m_tree.empty (); +} + +size_t scheduled_point_tree_t::get_size () const +{ + return m_tree.size (); +} + /* * vi: ts=4 sw=4 expandtab */ diff --git a/resource/planner/scheduled_point_tree.hpp b/resource/planner/c++/scheduled_point_tree.hpp similarity index 79% rename from resource/planner/scheduled_point_tree.hpp rename to resource/planner/c++/scheduled_point_tree.hpp index ed946f59b..bd87a2f20 100644 --- a/resource/planner/scheduled_point_tree.hpp +++ b/resource/planner/c++/scheduled_point_tree.hpp @@ -12,7 +12,15 @@ #define SCHEDULED_POINT_TREE_HPP #include + +#if defined (__clang__) || (__GNUC__ <= 11) +#include "src/common/yggdrasil/rbtree.hpp" +#elif (__GNUC__ > 11) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-template-keyword" #include "src/common/yggdrasil/rbtree.hpp" +#pragma GCC diagnostic pop +#endif struct scheduled_point_t; @@ -24,7 +32,7 @@ class rb_node_base_t { scheduled_point_t *get_point () { return m_point; } - const scheduled_point_t *get_point () const { + scheduled_point_t *get_point () const { return m_point; } private: @@ -43,16 +51,19 @@ using scheduled_point_rb_tree_t = ygg::RBTree #include #include #include -#include - -#include "planner_internal_tree.hpp" -#include "planner.h" - -struct request_t { - int64_t on_or_after; - uint64_t duration; - int64_t count; -}; - -/*! Node in a span interval tree to enable fast retrieval of intercepting spans. - */ -struct span_t { - int64_t start; /* start time of the span */ - int64_t last; /* end time of the span */ - int64_t span_id; /* unique span id */ - int64_t planned; /* required resource quantity */ - int in_system; /* 1 when inserted into the system */ - scheduled_point_t *start_p; /* scheduled point object at start */ - scheduled_point_t *last_p; /* scheduled point object at last */ -}; - -/*! Planner context - */ -struct planner { - int64_t total_resources; - std::string resource_type; - int64_t plan_start; /* base time of the planner */ - int64_t plan_end; /* end time of the planner */ - scheduled_point_tree_t sched_point_tree; /* scheduled point rb tree */ - mintime_resource_tree_t mt_resource_tree; /* min-time resource rb tree */ - scheduled_point_t *p0; /* system's scheduled point at base time */ - std::map> span_lookup; /* span lookup */ - std::map>::iterator span_lookup_iter; - std::map avail_time_iter; /* MT node track */ - request_t current_request; /* the req copy for avail time iteration */ - int avail_time_iter_set; /* iterator set flag */ - uint64_t span_counter; /* current span counter */ -}; +#include "resource/planner/c++/planner.hpp" /******************************************************************************* * * * Scheduled Point and Resource Update APIs * * * *******************************************************************************/ + static int track_points (std::map &tracker, scheduled_point_t *point) { @@ -78,21 +34,17 @@ static int track_points (std::map &tracker, static void restore_track_points (planner_t *ctx) { - scheduled_point_t *point = nullptr; - for (auto &kv : ctx->avail_time_iter) - ctx->mt_resource_tree.insert (kv.second); - ctx->avail_time_iter.clear (); + ctx->plan->restore_track_points (); } static void update_mintime_resource_tree (planner_t *ctx, std::list &list) { - scheduled_point_t *point = nullptr; for (auto &point : list) { if (point->in_mt_resource_tree) - ctx->mt_resource_tree.remove (point); + ctx->plan->mt_tree_remove (point); if (point->ref_count && !(point->in_mt_resource_tree)) - ctx->mt_resource_tree.insert (point); + ctx->plan->mt_tree_insert (point); } } @@ -108,8 +60,8 @@ static scheduled_point_t *get_or_new_point (planner_t *ctx, int64_t at) { scheduled_point_t *point = nullptr; try { - if ( !(point = ctx->sched_point_tree.search (at))) { - scheduled_point_t *state = ctx->sched_point_tree.get_state (at); + if ( !(point = ctx->plan->sp_tree_search (at))) { + scheduled_point_t *state = ctx->plan->sp_tree_get_state (at); point = new scheduled_point_t (); point->at = at; point->in_mt_resource_tree = 0; @@ -117,8 +69,8 @@ static scheduled_point_t *get_or_new_point (planner_t *ctx, int64_t at) point->ref_count = 0; point->scheduled = state->scheduled; point->remaining = state->remaining; - ctx->sched_point_tree.insert (point); - ctx->mt_resource_tree.insert (point); + ctx->plan->sp_tree_insert (point); + ctx->plan->mt_tree_insert (point); } } catch (std::bad_alloc &e) { errno = ENOMEM; @@ -129,13 +81,13 @@ static scheduled_point_t *get_or_new_point (planner_t *ctx, int64_t at) static void fetch_overlap_points (planner_t *ctx, int64_t at, uint64_t duration, std::list &list) { - scheduled_point_t *point = ctx->sched_point_tree.get_state (at); + scheduled_point_t *point = ctx->plan->sp_tree_get_state (at); while (point) { if (point->at >= static_cast (at + duration)) break; else if (point->at >= at) list.push_back (point); - point = ctx->sched_point_tree.next (point); + point = ctx->plan->sp_tree_next (point); } } @@ -147,7 +99,7 @@ static int update_points_add_span (planner_t *ctx, for (auto &point : list) { point->scheduled += span->planned; point->remaining -= span->planned; - if ( (point->scheduled > ctx->total_resources) + if ( (point->scheduled > ctx->plan->get_total_resources ()) || (point->remaining < 0)) { errno = ERANGE; rc = -1; @@ -165,7 +117,7 @@ static int update_points_subtract_span (planner_t *ctx, point->scheduled -= span->planned; point->remaining += span->planned; if ( (point->scheduled < 0) - || (point->remaining > ctx->total_resources)) { + || (point->remaining > ctx->plan->get_total_resources ())) { errno = ERANGE; rc = -1; } @@ -180,13 +132,13 @@ static bool span_ok (planner_t *ctx, scheduled_point_t *start_point, scheduled_point_t *next_point = nullptr; for (next_point = start_point; next_point != nullptr; - next_point = ctx->sched_point_tree.next (next_point)) { + next_point = ctx->plan->sp_tree_next (next_point)) { if (next_point->at >= (start_point->at + (int64_t)duration)) { ok = true; break; } else if (request > next_point->remaining) { - ctx->mt_resource_tree.remove (start_point); - track_points (ctx->avail_time_iter, start_point); + ctx->plan->mt_tree_remove (start_point); + track_points (ctx->plan->get_avail_time_iter (), start_point); ok = false; break; } @@ -199,17 +151,17 @@ static int64_t avail_at (planner_t *ctx, int64_t on_or_after, uint64_t duration, { int64_t at = -1; scheduled_point_t *start_point = nullptr; - while ((start_point = ctx->mt_resource_tree.get_mintime (request))) { + while ((start_point = ctx->plan->mt_tree_get_mintime (request))) { at = start_point->at; if (at < on_or_after) { - ctx->mt_resource_tree.remove (start_point); - track_points (ctx->avail_time_iter, start_point); + ctx->plan->mt_tree_remove (start_point); + track_points (ctx->plan->get_avail_time_iter (), start_point); at = -1; } else if (span_ok (ctx, start_point, duration, request)) { - ctx->mt_resource_tree.remove (start_point); - track_points (ctx->avail_time_iter, start_point); - if (static_cast (at + duration) > ctx->plan_end) + ctx->plan->mt_tree_remove (start_point); + track_points (ctx->plan->get_avail_time_iter (), start_point); + if (static_cast (at + duration) > ctx->plan->get_plan_end ()) at = -1; break; } @@ -221,12 +173,12 @@ static bool avail_during (planner_t *ctx, int64_t at, uint64_t duration, const int64_t request) { bool ok = true; - if (static_cast (at + duration) > ctx->plan_end) { + if (static_cast (at + duration) > ctx->plan->get_plan_end ()) { errno = ERANGE; return -1; } - scheduled_point_t *point = ctx->sched_point_tree.get_state (at); + scheduled_point_t *point = ctx->plan->sp_tree_get_state (at); while (point) { if (point->at >= (at + (int64_t)duration)) { ok = true; @@ -235,7 +187,7 @@ static bool avail_during (planner_t *ctx, int64_t at, uint64_t duration, ok = false; break; } - point = ctx->sched_point_tree.next (point); + point = ctx->plan->sp_tree_next (point); } return ok; } @@ -243,19 +195,19 @@ static bool avail_during (planner_t *ctx, int64_t at, uint64_t duration, static scheduled_point_t *avail_resources_during (planner_t *ctx, int64_t at, uint64_t duration) { - if (static_cast (at + duration) > ctx->plan_end) { + if (static_cast (at + duration) > ctx->plan->get_plan_end ()) { errno = ERANGE; return nullptr; } - scheduled_point_t *point = ctx->sched_point_tree.get_state (at); + scheduled_point_t *point = ctx->plan->sp_tree_get_state (at); scheduled_point_t *min = point; while (point) { if (point->at >= (at + (int64_t)duration)) break; else if (min->remaining > point->remaining) min = point; - point = ctx->sched_point_tree.next (point); + point = ctx->plan->sp_tree_next (point); } return min; } @@ -267,35 +219,17 @@ static scheduled_point_t *avail_resources_during (planner_t *ctx, int64_t at, * * *******************************************************************************/ -static void initialize (planner_t *ctx, int64_t base_time, uint64_t duration) -{ - ctx->plan_start = base_time; - ctx->plan_end = base_time + static_cast (duration); - ctx->p0 = new scheduled_point_t (); - ctx->p0->at = base_time; - ctx->p0->ref_count = 1; - ctx->p0->remaining = ctx->total_resources; - ctx->sched_point_tree.insert (ctx->p0); - ctx->mt_resource_tree.insert (ctx->p0); - ctx->avail_time_iter_set = 0; - ctx->span_counter = 0; -} - static inline void erase (planner_t *ctx) { - ctx->span_lookup.clear (); - ctx->avail_time_iter.clear (); - if (ctx->p0 && ctx->p0->in_mt_resource_tree) - ctx->mt_resource_tree.remove (ctx->p0); - ctx->sched_point_tree.destroy (); + ctx->plan->erase (); } static inline bool not_feasible (planner_t *ctx, int64_t start_time, uint64_t duration, int64_t request) { - bool rc = (start_time < ctx->plan_start) || (duration < 1) + bool rc = (start_time < ctx->plan->get_plan_start ()) || (duration < 1) || (static_cast (start_time + duration - 1) - > ctx->plan_end); + > ctx->plan->get_plan_end ()); return rc; } @@ -306,7 +240,7 @@ static int span_input_check (planner_t *ctx, int64_t start_time, if (!ctx || not_feasible (ctx, start_time, duration, request)) { errno = EINVAL; goto done; - } else if (request > ctx->total_resources || request < 0) { + } else if (request > ctx->plan->get_total_resources () || request < 0) { errno = ERANGE; goto done; } @@ -322,24 +256,23 @@ static std::shared_ptr span_new (planner_t *ctx, int64_t start_time, try { if (span_input_check (ctx, start_time, duration, (int64_t)request) == -1) goto done; - ctx->span_counter++; - if (ctx->span_lookup.find (ctx->span_counter) - != ctx->span_lookup.end ()) { + ctx->plan->incr_span_counter (); + if (ctx->plan->get_span_lookup ().find (ctx->plan->get_span_counter ()) + != ctx->plan->get_span_lookup ().end ()) { errno = EEXIST; goto done; } span = std::make_shared (); span->start = start_time; span->last = start_time + duration; - span->span_id = ctx->span_counter; + span->span_id = ctx->plan->get_span_counter (); span->planned = request; span->in_system = 0; span->start_p = nullptr; span->last_p = nullptr; // errno = EEXIST condition already checked above - ctx->span_lookup.insert (std::pair> ( - span->span_id, span)); + ctx->plan->span_lookup_insert (span->span_id, span); } catch (std::bad_alloc &e) { errno = ENOMEM; @@ -365,16 +298,15 @@ extern "C" planner_t *planner_new (int64_t base_time, uint64_t duration, if (duration < 1 || !resource_type) { errno = EINVAL; goto done; - } else if (resource_totals > std::numeric_limits::max ()) { + } else if (resource_totals > + static_cast (std::numeric_limits::max ())) { errno = ERANGE; goto done; } try { - ctx = new planner_t (); - ctx->total_resources = static_cast (resource_totals); - ctx->resource_type = resource_type; - initialize (ctx, base_time, duration); + ctx = new planner_t (base_time, duration, resource_totals, + resource_type); } catch (std::bad_alloc &e) { errno = ENOMEM; } @@ -383,6 +315,37 @@ extern "C" planner_t *planner_new (int64_t base_time, uint64_t duration, return ctx; } +extern "C" planner_t *planner_copy (planner_t *p) +{ + planner_t *ctx = nullptr; + + try { + ctx = new planner_t (*(p->plan)); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + + return ctx; +} + +extern "C" void planner_assign (planner_t *lhs, planner_t *rhs) +{ + (*(lhs->plan) = *(rhs->plan)); +} + +extern "C" planner_t *planner_new_empty () +{ + planner_t *ctx = nullptr; + + try { + ctx = new planner_t (); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + } + + return ctx; +} + extern "C" int planner_reset (planner_t *ctx, int64_t base_time, uint64_t duration) { @@ -394,7 +357,8 @@ extern "C" int planner_reset (planner_t *ctx, erase (ctx); try { - initialize (ctx, base_time, duration); + // Returns 0 or a negative int + rc = ctx->plan->reinitialize (base_time, duration); } catch (std::bad_alloc &e) { errno = ENOMEM; rc = -1; @@ -405,8 +369,6 @@ extern "C" int planner_reset (planner_t *ctx, extern "C" void planner_destroy (planner_t **ctx_p) { if (ctx_p && *ctx_p) { - restore_track_points (*ctx_p); - erase (*ctx_p); delete *ctx_p; *ctx_p = nullptr; } @@ -418,7 +380,7 @@ extern "C" int64_t planner_base_time (planner_t *ctx) errno = EINVAL; return -1; } - return ctx->plan_start; + return ctx->plan->get_plan_start (); } extern "C" int64_t planner_duration (planner_t *ctx) @@ -427,7 +389,7 @@ extern "C" int64_t planner_duration (planner_t *ctx) errno = EINVAL; return -1; } - return ctx->plan_end - ctx->plan_start; + return ctx->plan->get_plan_end () - ctx->plan->get_plan_start (); } extern "C" int64_t planner_resource_total (planner_t *ctx) @@ -436,7 +398,7 @@ extern "C" int64_t planner_resource_total (planner_t *ctx) errno = EINVAL; return -1; } - return ctx->total_resources; + return ctx->plan->get_total_resources (); } extern "C" const char *planner_resource_type (planner_t *ctx) @@ -445,7 +407,7 @@ extern "C" const char *planner_resource_type (planner_t *ctx) errno = EINVAL; return nullptr; } - return ctx->resource_type.c_str (); + return ctx->plan->get_resource_type ().c_str (); } extern "C" int64_t planner_avail_time_first (planner_t *ctx, @@ -454,18 +416,19 @@ extern "C" int64_t planner_avail_time_first (planner_t *ctx, uint64_t request) { int64_t t = -1; - if (!ctx || on_or_after < ctx->plan_start - || on_or_after >= ctx->plan_end || duration < 1) { + if (!ctx || on_or_after < ctx->plan->get_plan_start () + || on_or_after >= ctx->plan->get_plan_end () || duration < 1) { errno = EINVAL; return -1; } - if (static_cast (request) > ctx->total_resources) { + if (static_cast (request) > ctx->plan->get_total_resources ()) { errno = ERANGE; return -1; } restore_track_points (ctx); - ctx->avail_time_iter_set = 1; - copy_req (ctx->current_request, on_or_after, duration, request); + ctx->plan->set_avail_time_iter_set (1); + copy_req (ctx->plan->get_current_request (), on_or_after, + duration, request); if ( (t = avail_at (ctx, on_or_after, duration, (int64_t)request)) == -1) errno = ENOENT; return t; @@ -477,14 +440,14 @@ extern "C" int64_t planner_avail_time_next (planner_t *ctx) int64_t on_or_after = -1; uint64_t duration = 0; int64_t request_count = 0; - if (!ctx || !ctx->avail_time_iter_set) { + if (!ctx || !ctx->plan->get_avail_time_iter_set ()) { errno = EINVAL; return -1; } - request_count = ctx->current_request.count; - on_or_after = ctx->current_request.on_or_after; - duration = ctx->current_request.duration; - if (request_count > ctx->total_resources) { + request_count = ctx->plan->get_current_request_const ().count; + on_or_after = ctx->plan->get_current_request_const ().on_or_after; + duration = ctx->plan->get_current_request_const ().duration; + if (request_count > ctx->plan->get_total_resources ()) { errno = ERANGE; return -1; } @@ -502,7 +465,7 @@ extern "C" int planner_avail_during (planner_t *ctx, int64_t start_time, errno = EINVAL; return -1; } - if (static_cast (request) > ctx->total_resources) { + if (static_cast (request) > ctx->plan->get_total_resources ()) { errno = ERANGE; return -1; } @@ -511,10 +474,10 @@ extern "C" int planner_avail_during (planner_t *ctx, int64_t start_time, } extern "C" int64_t planner_avail_resources_during (planner_t *ctx, - int64_t at, uint64_t duration) + int64_t at, uint64_t duration) { scheduled_point_t *min_point = nullptr; - if (!ctx || at > ctx->plan_end || duration < 1) { + if (!ctx || at > ctx->plan->get_plan_end () || duration < 1) { errno = EINVAL; return -1; } @@ -524,12 +487,13 @@ extern "C" int64_t planner_avail_resources_during (planner_t *ctx, extern "C" int64_t planner_avail_resources_at (planner_t *ctx, int64_t at) { - scheduled_point_t *state = nullptr; - if (!ctx || at > ctx->plan_end || at < ctx->plan_start) { + const scheduled_point_t *state = nullptr; + if (!ctx || at > ctx->plan->get_plan_end () + || at < ctx->plan->get_plan_start ()) { errno = EINVAL; return -1; } - state = ctx->sched_point_tree.get_state (at); + state = ctx->plan->sp_tree_get_state (at); return state->remaining; } @@ -568,7 +532,7 @@ extern "C" int64_t planner_add_span (planner_t *ctx, int64_t start_time, list.clear (); span->in_system = 1; - ctx->avail_time_iter_set = 0; + ctx->plan->set_avail_time_iter_set (0); return span->span_id; } @@ -583,8 +547,8 @@ extern "C" int planner_rem_span (planner_t *ctx, int64_t span_id) errno = EINVAL; return -1; } - it = ctx->span_lookup.find (span_id); - if (it == ctx->span_lookup.end ()) { + it = ctx->plan->get_span_lookup ().find (span_id); + if (it == ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return -1; } @@ -601,25 +565,24 @@ extern "C" int planner_rem_span (planner_t *ctx, int64_t span_id) span->in_system = 0; if (span->start_p->ref_count == 0) { - ctx->sched_point_tree.remove (span->start_p); + ctx->plan->sp_tree_remove (span->start_p); if (span->start_p->in_mt_resource_tree) - ctx->mt_resource_tree.remove (span->start_p); + ctx->plan->mt_tree_remove (span->start_p); delete span->start_p; span->start_p = nullptr; } if (span->last_p->ref_count == 0) { - ctx->sched_point_tree.remove (span->last_p); + ctx->plan->sp_tree_remove (span->last_p); if (span->last_p->in_mt_resource_tree) - ctx->mt_resource_tree.remove (span->last_p); + ctx->plan->mt_tree_remove (span->last_p); delete span->last_p; span->last_p = nullptr; } - ctx->span_lookup.erase (it); + ctx->plan->span_lookup_erase (it); list.clear (); - ctx->avail_time_iter_set = 0; + ctx->plan->set_avail_time_iter_set (0); rc = 0; -done: return rc; } @@ -629,12 +592,14 @@ extern "C" int64_t planner_span_first (planner_t *ctx) errno = EINVAL; return -1; } - ctx->span_lookup_iter = ctx->span_lookup.begin (); - if (ctx->span_lookup_iter == ctx->span_lookup.end ()) { + auto span_lookup_begin = ctx->plan->get_span_lookup ().begin (); + ctx->plan->set_span_lookup_iter (span_lookup_begin); + if (ctx->plan->get_span_lookup_iter () == + ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return -1; } - std::shared_ptr &span = ctx->span_lookup_iter->second; + std::shared_ptr &span = ctx->plan->get_span_lookup_iter ()->second; return span->span_id; } @@ -644,12 +609,13 @@ extern "C" int64_t planner_span_next (planner_t *ctx) errno = EINVAL; return -1; } - ctx->span_lookup_iter++; - if (ctx->span_lookup_iter == ctx->span_lookup.end ()) { + ctx->plan->incr_span_lookup_iter (); + if (ctx->plan->get_span_lookup_iter () == + ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return -1; } - std::shared_ptr &span = ctx->span_lookup_iter->second; + std::shared_ptr &span = ctx->plan->get_span_lookup_iter ()->second; return span->span_id; } @@ -659,7 +625,7 @@ extern "C" size_t planner_span_size (planner_t *ctx) errno = EINVAL; return 0; } - return ctx->span_lookup.size (); + return ctx->plan->span_lookup_get_size (); } extern "C" bool planner_is_active_span (planner_t *ctx, int64_t span_id) @@ -668,8 +634,9 @@ extern "C" bool planner_is_active_span (planner_t *ctx, int64_t span_id) errno = EINVAL; return false; } - auto it = ctx->span_lookup.find (span_id); - if (ctx->span_lookup.find (span_id) == ctx->span_lookup.end ()) { + auto it = ctx->plan->get_span_lookup ().find (span_id); + if (ctx->plan->get_span_lookup ().find (span_id) == + ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return false; } @@ -683,8 +650,9 @@ extern "C" int64_t planner_span_start_time (planner_t *ctx, int64_t span_id) errno = EINVAL; return -1; } - auto it = ctx->span_lookup.find (span_id); - if (ctx->span_lookup.find (span_id) == ctx->span_lookup.end ()) { + auto it = ctx->plan->get_span_lookup ().find (span_id); + if (ctx->plan->get_span_lookup ().find (span_id) == + ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return -1; } @@ -698,8 +666,9 @@ extern "C" int64_t planner_span_duration (planner_t *ctx, int64_t span_id) errno = EINVAL; return -1; } - auto it = ctx->span_lookup.find (span_id); - if (ctx->span_lookup.find (span_id) == ctx->span_lookup.end ()) { + auto it = ctx->plan->get_span_lookup ().find (span_id); + if (ctx->plan->get_span_lookup ().find (span_id) == + ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return -1; } @@ -707,14 +676,16 @@ extern "C" int64_t planner_span_duration (planner_t *ctx, int64_t span_id) return (span->last - span->start); } -extern "C" int64_t planner_span_resource_count (planner_t *ctx, int64_t span_id) +extern "C" int64_t planner_span_resource_count (planner_t *ctx, + int64_t span_id) { if (!ctx) { errno = EINVAL; return -1; } - auto it = ctx->span_lookup.find (span_id); - if (ctx->span_lookup.find (span_id) == ctx->span_lookup.end ()) { + auto it = ctx->plan->get_span_lookup ().find (span_id); + if (ctx->plan->get_span_lookup ().find (span_id) == + ctx->plan->get_span_lookup ().end ()) { errno = EINVAL; return -1; } @@ -722,6 +693,11 @@ extern "C" int64_t planner_span_resource_count (planner_t *ctx, int64_t span_id) return span->planned; } +extern "C" bool planners_equal (planner_t *lhs, planner_t *rhs) +{ + return (*(lhs->plan) == *(rhs->plan)); +} + /* * vi: ts=4 sw=4 expandtab */ diff --git a/resource/planner/planner_multi.h b/resource/planner/c/planner_multi.h similarity index 91% rename from resource/planner/planner_multi.h rename to resource/planner/c/planner_multi.h index 48c954597..94a541df2 100644 --- a/resource/planner/planner_multi.h +++ b/resource/planner/c/planner_multi.h @@ -17,7 +17,7 @@ extern "C" { #endif -typedef struct planner_multi planner_multi_t; +typedef struct planner_multi_t planner_multi_t; /*! Construct a planner_multi_t context that creates and manages len number of * planner_t objects. Individual planner_t context can be accessed via @@ -48,6 +48,34 @@ planner_multi_t *planner_multi_new (int64_t base_time, uint64_t duration, const uint64_t *resource_totals, const char **resource_types, size_t len); +/*! Initialize empty planner_multi. + * + * \return new planner_multi context; NULL on an error with errno set + * as follows: + * pointer to a planner_multi_t object on success; -1 on + * an error with errno set. + */ +planner_multi_t *planner_multi_empty (); + +/*! Copy a planner_multi_t. + * + * \param mp planner to copy. + * + * \return a new planner_multi context copied from mp; NULL on error + * with errno set as follows: + * ENOMEM: memory error. + */ +planner_multi_t *planner_multi_copy (planner_multi_t *mp); + +/*! Assign a planner_multi_t. + * + * \param lhs the base planner_multi which will be assigned to rhs. + * \param rhs the base planner_multi which will be copied and returned as + * a new planner_multi context. + * + */ +void planner_multi_assign (planner_multi_t *lhs, planner_multi_t *rhs); + /*! Getters: * \return -1 or NULL on an error with errno set as follows: * EINVAL: invalid argument. @@ -258,6 +286,12 @@ int64_t planner_multi_span_next (planner_multi_t *ctx); size_t planner_multi_span_size (planner_multi_t *ctx); +/* + * Returns true if all the member variables and objects are equal. + * Used by testsuite. +*/ +bool planner_multis_equal (planner_multi_t *lhs, planner_multi_t *rhs); + #ifdef __cplusplus } #endif diff --git a/resource/planner/planner_multi.cpp b/resource/planner/c/planner_multi_c_interface.cpp similarity index 56% rename from resource/planner/planner_multi.cpp rename to resource/planner/c/planner_multi_c_interface.cpp index df181116a..95886ce23 100644 --- a/resource/planner/planner_multi.cpp +++ b/resource/planner/c/planner_multi_c_interface.cpp @@ -1,5 +1,5 @@ /*****************************************************************************\ - * Copyright 2014 Lawrence Livermore National Security, LLC + * Copyright 2023 Lawrence Livermore National Security, LLC * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) * * This file is part of the Flux resource manager framework. @@ -8,12 +8,6 @@ * SPDX-License-Identifier: LGPL-3.0 \*****************************************************************************/ -extern "C" { -#if HAVE_CONFIG_H -#include "config.h" -#endif -} - #include #include #include @@ -22,24 +16,15 @@ extern "C" { #include #include "planner_multi.h" +#include "resource/planner/c++/planner_multi.hpp" + +/**************************************************************************** + * * + * Planner Multi and Resource Update APIs * + * * + ****************************************************************************/ -struct request { - int64_t on_or_after; - uint64_t duration; - std::vector counts; -}; - -struct planner_multi { - std::vector planners; - std::vector resource_totals; - std::vector resource_types; - struct request iter; - std::map> span_lookup; - std::map>::iterator span_lookup_iter; - uint64_t span_counter; -}; - -static void fill_iter_request (planner_multi_t *ctx, struct request *iter, +static void fill_iter_request (planner_multi_t *ctx, struct request_multi *iter, int64_t at, uint64_t duration, const uint64_t *resources, size_t len) { @@ -57,15 +42,14 @@ extern "C" planner_multi_t *planner_multi_new ( { size_t i = 0; planner_multi_t *ctx = nullptr; - char *type = nullptr; - planner_t *p; if (duration < 1 || !resource_totals || !resource_types) { errno = EINVAL; goto error; } else { for (i = 0; i < len; ++i) { - if (resource_totals[i] > std::numeric_limits::max ()) { + if (resource_totals[i] > + static_cast (std::numeric_limits::max ())) { errno = ERANGE; goto error; } @@ -73,22 +57,8 @@ extern "C" planner_multi_t *planner_multi_new ( } try { - ctx = new planner_multi (); - ctx->iter.on_or_after = 0; - ctx->iter.duration = 0; - for (i = 0; i < len; ++i) { - ctx->resource_totals.push_back (resource_totals[i]); - if ( (type = strdup (resource_types[i])) == nullptr) - goto nomem_error; - ctx->resource_types.push_back (type); - ctx->iter.counts.push_back (0); - if ( (p = planner_new (base_time, duration, - resource_totals[i], - resource_types[i])) == nullptr) - goto nomem_error; - ctx->planners.push_back (p); - } - ctx->span_counter = 0; + ctx = new planner_multi_t (base_time, duration, resource_totals, + resource_types, len); } catch (std::bad_alloc &e) { goto nomem_error; } @@ -101,13 +71,54 @@ extern "C" planner_multi_t *planner_multi_new ( return ctx; } +extern "C" planner_multi_t *planner_multi_empty () +{ + planner_multi_t *ctx = nullptr; + + try { + ctx = new planner_multi_t (); + } catch (std::bad_alloc &e) { + goto nomem_error; + } + return ctx; + +nomem_error: + errno = ENOMEM; + planner_multi_destroy (&ctx); + return ctx; +} + +extern "C" planner_multi_t *planner_multi_copy (planner_multi_t *mp) +{ + planner_multi_t *ctx = nullptr; + + try { + ctx = new planner_multi_t (*(mp->plan_multi)); + } catch (std::bad_alloc &e) { + errno = ENOMEM; + goto nomem_error; + } + return ctx; + +nomem_error: + errno = ENOMEM; + planner_multi_destroy (&ctx); + return ctx; +} + +extern "C" void planner_multi_assign (planner_multi_t *lhs, + planner_multi_t *rhs) +{ + (*(lhs->plan_multi) = *(rhs->plan_multi)); +} + extern "C" int64_t planner_multi_base_time (planner_multi_t *ctx) { if (!ctx) { errno = EINVAL; return -1; } - return planner_base_time (ctx->planners[0]); + return planner_base_time (ctx->plan_multi->get_planners_at (0)); } extern "C" int64_t planner_multi_duration (planner_multi_t *ctx) @@ -116,7 +127,7 @@ extern "C" int64_t planner_multi_duration (planner_multi_t *ctx) errno = EINVAL; return -1; } - return planner_duration (ctx->planners[0]); + return planner_duration (ctx->plan_multi->get_planners_at (0)); } extern "C" size_t planner_multi_resources_len (planner_multi_t *ctx) @@ -125,7 +136,7 @@ extern "C" size_t planner_multi_resources_len (planner_multi_t *ctx) errno = EINVAL; return 0; } - return ctx->planners.size (); + return ctx->plan_multi->get_planners_size (); } extern "C" const char **planner_multi_resource_types (planner_multi_t *ctx) @@ -134,7 +145,7 @@ extern "C" const char **planner_multi_resource_types (planner_multi_t *ctx) errno = EINVAL; return nullptr; } - return &(ctx->resource_types[0]); + return &(ctx->plan_multi->m_resource_types[0]); } extern "C" const uint64_t *planner_multi_resource_totals (planner_multi_t *ctx) @@ -143,7 +154,7 @@ extern "C" const uint64_t *planner_multi_resource_totals (planner_multi_t *ctx) errno = EINVAL; return nullptr; } - return &(ctx->resource_totals[0]); + return &(ctx->plan_multi->m_resource_totals[0]); } extern "C" int64_t planner_multi_resource_total_at (planner_multi_t *ctx, @@ -151,11 +162,11 @@ extern "C" int64_t planner_multi_resource_total_at (planner_multi_t *ctx, { int64_t rc = -1; if (ctx) { - if (i >= ctx->planners.size ()) { + if (i >= ctx->plan_multi->get_planners_size ()) { errno = EINVAL; goto done; } - rc = planner_resource_total (ctx->planners[i]); + rc = planner_resource_total (ctx->plan_multi->get_planners_at (i)); } done: return rc; @@ -168,13 +179,13 @@ extern "C" int64_t planner_multi_resource_total_by_type ( int64_t rc = -1; if (!ctx || !resource_type) goto done; - for (i = 0; i < ctx->planners.size (); i++) { - if ( !(strcmp (ctx->resource_types[i], resource_type))) { - rc = planner_resource_total (ctx->planners[i]); + for (i = 0; i < ctx->plan_multi->get_planners_size (); i++) { + if ( !(strcmp (ctx->plan_multi->get_resource_types_at (i), resource_type))) { + rc = planner_resource_total (ctx->plan_multi->get_planners_at (i)); break; } } - if (i == ctx->planners.size ()) + if (i == ctx->plan_multi->get_planners_size ()) errno = EINVAL; done: return rc; @@ -190,8 +201,8 @@ extern "C" int planner_multi_reset (planner_multi_t *ctx, goto done; } - for (i = 0; i < ctx->planners.size (); ++i) - if (planner_reset (ctx->planners[i], base_time, duration) == -1) + for (i = 0; i < ctx->plan_multi->get_planners_size (); ++i) + if (planner_reset (ctx->plan_multi->get_planners_at (i), base_time, duration) == -1) goto done; rc = 0; @@ -201,12 +212,7 @@ extern "C" int planner_multi_reset (planner_multi_t *ctx, extern "C" void planner_multi_destroy (planner_multi_t **ctx_p) { - size_t i = 0; if (ctx_p && *ctx_p) { - for (i = 0; i < (*ctx_p)->planners.size (); ++i) - planner_destroy (&((*ctx_p)->planners[i])); - for (i = 0; i < (*ctx_p)->resource_types.size (); ++i) - free ((void *)(*ctx_p)->resource_types[i]); delete *ctx_p; *ctx_p = nullptr; } @@ -216,11 +222,11 @@ extern "C" planner_t *planner_multi_planner_at (planner_multi_t *ctx, unsigned int i) { planner_t *planner = nullptr; - if (!ctx || i >= ctx->planners.size ()) { + if (!ctx || i >= ctx->plan_multi->get_planners_size ()) { errno = EINVAL; goto done; } - planner = ctx->planners[i]; + planner = ctx->plan_multi->get_planners_at (i); done: return planner; } @@ -234,28 +240,28 @@ extern "C" int64_t planner_multi_avail_time_first ( int unmet = 0; int64_t t = -1; - if (!ctx || !resource_requests || ctx->planners.size () < 1 - || ctx->planners.size () != len) { + if (!ctx || !resource_requests || ctx->plan_multi->get_planners_size () < 1 + || ctx->plan_multi->get_planners_size () != len) { errno = EINVAL; goto done; } - fill_iter_request (ctx, &(ctx->iter), + fill_iter_request (ctx, &(ctx->plan_multi->get_iter ()), on_or_after, duration, resource_requests, len); - if ((t = planner_avail_time_first (ctx->planners[0], on_or_after, + if ((t = planner_avail_time_first (ctx->plan_multi->get_planners_at (0), on_or_after, duration, resource_requests[0])) == -1) goto done; do { unmet = 0; - for (i = 1; i < ctx->planners.size (); ++i) { - if ((unmet = planner_avail_during (ctx->planners[i], + for (i = 1; i < ctx->plan_multi->get_planners_size (); ++i) { + if ((unmet = planner_avail_during (ctx->plan_multi->get_planners_at (i), t, duration, resource_requests[i])) == -1) break; } - } while (unmet && (t = planner_avail_time_next (ctx->planners[0])) != -1); + } while (unmet && (t = planner_avail_time_next (ctx->plan_multi->get_planners_at (0))) != -1); done: return t; @@ -274,12 +280,12 @@ extern "C" int64_t planner_multi_avail_time_next (planner_multi_t *ctx) do { unmet = 0; - if ((t = planner_avail_time_next (ctx->planners[0])) == -1) + if ((t = planner_avail_time_next (ctx->plan_multi->get_planners_at (0))) == -1) break; - for (i = 1; i < ctx->planners.size (); ++i) { - if ((unmet = planner_avail_during (ctx->planners[i], t, - ctx->iter.duration, - ctx->iter.counts[i])) == -1) + for (i = 1; i < ctx->plan_multi->get_planners_size (); ++i) { + if ((unmet = planner_avail_during (ctx->plan_multi->get_planners_at (i), t, + ctx->plan_multi->get_iter ().duration, + ctx->plan_multi->get_iter ().counts[i])) == -1) break; } } while (unmet); @@ -291,11 +297,11 @@ extern "C" int64_t planner_multi_avail_time_next (planner_multi_t *ctx) extern "C" int64_t planner_multi_avail_resources_at ( planner_multi_t *ctx, int64_t at, unsigned int i) { - if (!ctx || i >= ctx->planners.size ()) { + if (!ctx || i >= ctx->plan_multi->get_planners_size ()) { errno = EINVAL; return -1; } - return planner_avail_resources_at (ctx->planners[i], at); + return planner_avail_resources_at (ctx->plan_multi->get_planners_at (i), at); } extern "C" int planner_multi_avail_resources_array_at ( @@ -304,12 +310,12 @@ extern "C" int planner_multi_avail_resources_array_at ( { size_t i = 0; int64_t rc = 0; - if (!ctx || !resource_counts || ctx->planners.size () != len) { + if (!ctx || !resource_counts || ctx->plan_multi->get_planners_size () != len) { errno = EINVAL; return -1; } - for (i = 0; i < ctx->planners.size (); ++i) { - rc = planner_avail_resources_at (ctx->planners[i], at); + for (i = 0; i < ctx->plan_multi->get_planners_size (); ++i) { + rc = planner_avail_resources_at (ctx->plan_multi->get_planners_at (i), at); if (rc == -1) break; resource_counts[i] = rc; @@ -323,12 +329,12 @@ extern "C" int planner_multi_avail_during ( { size_t i = 0; int rc = 0; - if (!ctx || !resource_requests || ctx->planners.size () != len) { + if (!ctx || !resource_requests || ctx->plan_multi->get_planners_size () != len) { errno = EINVAL; return -1; } - for (i = 0; i < ctx->planners.size (); ++i) { - rc = planner_avail_during (ctx->planners[i], at, duration, + for (i = 0; i < ctx->plan_multi->get_planners_size (); ++i) { + rc = planner_avail_during (ctx->plan_multi->get_planners_at (i), at, duration, resource_requests[i]); if (rc == -1) break; @@ -343,12 +349,12 @@ extern "C" int planner_multi_avail_resources_array_during ( size_t i = 0; int64_t rc = 0; if (!ctx || !resource_counts - || ctx->planners.size () < 1 || ctx->planners.size () != len) { + || ctx->plan_multi->get_planners_size () < 1 || ctx->plan_multi->get_planners_size () != len) { errno = EINVAL; return -1; } - for (i = 0; i < ctx->planners.size (); ++i) { - rc = planner_avail_resources_during (ctx->planners[i], at, duration); + for (i = 0; i < ctx->plan_multi->get_planners_size (); ++i) { + rc = planner_avail_resources_during (ctx->plan_multi->get_planners_at (i), at, duration); if (rc == -1) break; resource_counts[i] = rc; @@ -365,11 +371,11 @@ extern "C" int64_t planner_multi_add_span ( int64_t span = -1; int64_t mspan = -1; - if (!ctx || !resource_requests || len != ctx->planners.size ()) + if (!ctx || !resource_requests || len != ctx->plan_multi->get_planners_size ()) return -1; - mspan = ctx->span_counter; - auto res = ctx->span_lookup.insert ( + mspan = ctx->plan_multi->get_span_counter (); + auto res = ctx->plan_multi->get_span_lookup ().insert ( std::pair> ( mspan, std::vector ())); if (!res.second) { @@ -377,16 +383,16 @@ extern "C" int64_t planner_multi_add_span ( return -1; } - ctx->span_counter++; + ctx->plan_multi->incr_span_counter (); for (i = 0; i < len; ++i) { - if ( (span = planner_add_span (ctx->planners[i], + if ( (span = planner_add_span (ctx->plan_multi->get_planners_at (i), start_time, duration, resource_requests[i])) == -1) { - ctx->span_lookup.erase (mspan); + ctx->plan_multi->get_span_lookup ().erase (mspan); return -1; } - ctx->span_lookup[mspan].push_back (span); + ctx->plan_multi->get_span_lookup ()[mspan].push_back (span); } return mspan; } @@ -400,16 +406,16 @@ extern "C" int planner_multi_rem_span (planner_multi_t *ctx, int64_t span_id) errno = EINVAL; return -1; } - auto it = ctx->span_lookup.find (span_id); - if (it == ctx->span_lookup.end ()) { + auto it = ctx->plan_multi->get_span_lookup ().find (span_id); + if (it == ctx->plan_multi->get_span_lookup ().end ()) { errno = ENOENT; goto done; } for (i = 0; i < it->second.size (); ++i) { - if (planner_rem_span (ctx->planners[i], it->second[i]) == -1) + if (planner_rem_span (ctx->plan_multi->get_planners_at (i), it->second[i]) == -1) goto done; } - ctx->span_lookup.erase (it); + ctx->plan_multi->get_span_lookup ().erase (it); rc = 0; done: return rc; @@ -418,17 +424,18 @@ extern "C" int planner_multi_rem_span (planner_multi_t *ctx, int64_t span_id) int64_t planner_multi_span_first (planner_multi_t *ctx) { int64_t rc = -1; + std::map>::iterator tmp_it = ctx->plan_multi->get_span_lookup ().begin (); if (!ctx) { errno = EINVAL; goto done; } - ctx->span_lookup_iter = ctx->span_lookup.begin (); - if (ctx->span_lookup_iter == ctx->span_lookup.end ()) { + ctx->plan_multi->set_span_lookup_iter (tmp_it); + if (ctx->plan_multi->get_span_lookup_iter () == ctx->plan_multi->get_span_lookup ().end ()) { errno = ENOENT; goto done; } - rc = ctx->span_lookup_iter->first; + rc = ctx->plan_multi->get_span_lookup_iter ()->first; done: return rc; } @@ -436,18 +443,17 @@ int64_t planner_multi_span_first (planner_multi_t *ctx) extern "C" int64_t planner_multi_span_next (planner_multi_t *ctx) { int64_t rc = -1; - void *span = nullptr; if (!ctx) { errno = EINVAL; goto done; } - ctx->span_lookup_iter++; - if (ctx->span_lookup_iter == ctx->span_lookup.end ()) { + ctx->plan_multi->incr_span_lookup_iter (); + if (ctx->plan_multi->get_span_lookup_iter () == ctx->plan_multi->get_span_lookup ().end ()) { errno = ENOENT; goto done; } - rc = ctx->span_lookup_iter->first; + rc = ctx->plan_multi->get_span_lookup_iter ()->first; done: return rc; } @@ -458,7 +464,13 @@ extern "C" size_t planner_multi_span_size (planner_multi_t *ctx) errno = EINVAL; return 0; } - return ctx->span_lookup.size (); + return ctx->plan_multi->get_span_lookup ().size (); +} + +extern "C" bool planner_multis_equal (planner_multi_t *lhs, + planner_multi_t *rhs) +{ + return (*(lhs->plan_multi) == *(rhs->plan_multi)); } /* diff --git a/resource/planner/test/Makefile.am b/resource/planner/test/Makefile.am index 0ec9e42d0..ec51789ad 100644 --- a/resource/planner/test/Makefile.am +++ b/resource/planner/test/Makefile.am @@ -13,16 +13,16 @@ TESTS = planner_test01 planner_test02 check_PROGRAMS = $(TESTS) planner_test01_SOURCES = planner_test01.cpp -planner_test01_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir)/resource/planner +planner_test01_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir)/resource/planner/c -I$(top_srcdir)/resource/planner/c++ planner_test01_LDADD = \ - $(top_builddir)/resource/planner/libplanner.la \ + $(top_builddir)/resource/planner/c/libplanner.la \ $(top_builddir)/src/common/libtap/libtap.la \ $(CZMQ_LIBS) planner_test02_SOURCES = planner_test02.cpp -planner_test02_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir)/resource/planner +planner_test02_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir)/resource/planner/c -I$(top_srcdir)/resource/planner/c++ planner_test02_LDADD = \ - $(top_builddir)/resource/planner/libplanner.la \ + $(top_builddir)/resource/planner/c/libplanner.la \ $(top_builddir)/src/common/libtap/libtap.la \ $(CZMQ_LIBS) diff --git a/resource/planner/test/planner_test01.cpp b/resource/planner/test/planner_test01.cpp index f3cee6bf9..97793d715 100644 --- a/resource/planner/test/planner_test01.cpp +++ b/resource/planner/test/planner_test01.cpp @@ -642,9 +642,90 @@ static int test_more_add_remove () return 0; } +static int test_constructors_and_overload () +{ + int rc; + int64_t span; + bool bo = false; + uint64_t resource_total = 100000; + uint64_t resource1 = 36; + uint64_t resource2 = 3600; + uint64_t resource3 = 1800; + uint64_t resource4 = 1152; + uint64_t resource5 = 2304; + uint64_t resource6 = 468; + const char resource_type[] = "core"; + planner_t *ctx, *ctx2, *ctx3, *ctx4 = NULL; + + ctx = planner_new (0, INT64_MAX, resource_total, resource_type); + + // Add some spans + planner_add_span (ctx, 0, 600, resource1); + planner_add_span (ctx, 0, 57600, resource2); + planner_add_span (ctx, 57600, 57600, resource3); + span = planner_add_span (ctx, 115200, 57600, resource4); + planner_add_span (ctx, 172800, 57600, resource5); + planner_add_span (ctx, 115200, 900, resource6); + + bo = (bo || !(planners_equal (ctx, ctx))); + ok (!bo, "populated planner should equal itself"); + + ctx2 = planner_new_empty (); + bo = (bo || !(planners_equal (ctx2, ctx2))); + ok (!bo, "empty planner should equal itself"); + + bo = (bo || planners_equal (ctx, ctx2)); + ok (!bo, "empty planner should not equal populated planner"); + + ctx3 = planner_new_empty (); + bo = (bo || !planners_equal (ctx2, ctx3)); + ok (!bo, "empty planners should be equal"); + + planner_assign (ctx2, ctx); + planner_assign (ctx3, ctx2); + bo = (bo || !(planners_equal (ctx2, ctx3))); + bo = (bo || !(planners_equal (ctx, ctx2))); + ok (!bo, "test assignment overload"); + + planner_reset (ctx3, 0, INT64_MAX); + bo = (bo || planners_equal (ctx2, ctx3)); + ok (!bo, "ensure planner reset works as intended"); + + ctx4 = planner_copy (ctx2); + bo = (bo || !(planners_equal (ctx2, ctx4))); + ok (!bo, "test copy constructor"); + + bo = (bo || !(planners_equal (ctx, ctx2))); + ok (!bo, "test copy constructor doesn't mutate planner"); + + rc = planner_rem_span (ctx2, span); + bo = (bo || (planners_equal (ctx2, ctx4)) || rc == -1); + ok (!bo, "compare planners after mutation"); + + planner_assign (ctx4, ctx2); + bo = (bo || !(planners_equal (ctx2, ctx4))); + ok (!bo, "assignment overload works on planners with state"); + + planner_destroy (&ctx); + ctx = planner_copy (ctx4); + bo = (bo || !(planners_equal (ctx, ctx4))); + ok (!bo, "copy constructor works on planners with state"); + + bo = (bo || !(planner_avail_resources_at (ctx, 57600) == + planner_avail_resources_at (ctx4, 57600))); + ok (!bo, "test for avail time equality"); + + planner_destroy (&ctx); + planner_destroy (&ctx2); + planner_destroy (&ctx3); + planner_destroy (&ctx4); + + return 0; +} + int main (int argc, char *argv[]) { - plan (51); + plan (63); test_planner_getters (); @@ -666,6 +747,8 @@ int main (int argc, char *argv[]) test_more_add_remove (); + test_constructors_and_overload (); + done_testing (); return EXIT_SUCCESS; diff --git a/resource/planner/test/planner_test02.cpp b/resource/planner/test/planner_test02.cpp index fcb97f9fc..dd4db132d 100644 --- a/resource/planner/test/planner_test02.cpp +++ b/resource/planner/test/planner_test02.cpp @@ -21,7 +21,7 @@ extern "C" { #include #include #include -#include "planner_multi.h" +#include "resource/planner/c/planner_multi.h" #include "src/common/libtap/tap.h" static void to_stream (int64_t base_time, uint64_t duration, const uint64_t *cnts, @@ -539,10 +539,86 @@ static int test_multi_add_remove () } +static int test_constructors_and_overload () +{ + bool bo = false; + size_t len = 5; + size_t size = 0; + int rc = -1; + int64_t span = -1; + const uint64_t resource_totals[] = {10, 20, 30, 40, 50}; + const char *resource_types[] = {"A", "B", "C", "D", "E"}; + const uint64_t request1[] = {1, 0, 0, 0, 0}; + const uint64_t request2[] = {0, 2, 0, 0, 0}; + const uint64_t request3[] = {0, 0, 3, 0, 0}; + planner_multi_t *ctx, *ctx2, *ctx3, *ctx4 = NULL; + + ctx = planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + + planner_multi_add_span (ctx, 0, 1000, request1, len); + span = planner_multi_add_span (ctx, 1000, 1000, request2, len); + planner_multi_add_span (ctx, 2000, 1000, request3, len); + + bo = (bo || !(planner_multis_equal (ctx, ctx))); + ok (!bo, "populated planner should equal itself"); + + ctx2 = planner_multi_empty (); + bo = (bo || !(planner_multis_equal (ctx2, ctx2))); + ok (!bo, "empty planner should equal itself"); + + bo = (bo || planner_multis_equal (ctx, ctx2)); + ok (!bo, "empty planner should not equal populated planner"); + + ctx3 = planner_multi_empty (); + bo = (bo || !planner_multis_equal (ctx2, ctx3)); + + planner_multi_assign (ctx2, ctx); + bo = (bo || !(planner_multis_equal (ctx, ctx2))); + ok (!bo, "test assignment overload"); + + ctx4 = planner_multi_copy (ctx2); + bo = (bo || !(planner_multis_equal (ctx2, ctx4))); + ok (!bo, "test copy constructor"); + + bo = (bo || !(planner_multis_equal (ctx, ctx2))); + ok (!bo, "test copy constructor doesn't mutate planner"); + // Compare planners after mutation + rc = planner_multi_rem_span (ctx2, span); + size = planner_multi_span_size (ctx2); + ok ((size == 2), "planner_multi_span_size works after copy"); + + bo = (bo || (planner_multis_equal (ctx2, ctx4)) || rc == -1); + size = planner_multi_span_size (ctx4); + ok ((size == 3), "removing span doesn't change deep copy's size"); + // Assignment overload works on planners with state + planner_multi_assign (ctx4, ctx2); + size = planner_multi_span_size (ctx4); + ok ((size == 2), "planner_multi 3 now has the size of planner_multi 2"); + bo = (bo || !(planner_multis_equal (ctx2, ctx4))); + ok (!bo, "assignment overload works on planners with state"); + + planner_multi_destroy (&ctx); + ctx = planner_multi_copy (ctx4); + bo = (bo || !(planner_multis_equal (ctx, ctx4))); + ok (!bo, "copy constructor works on planners with updated state"); + + bo = (bo || !(planner_multi_avail_resources_at (ctx, 500, 1) == + planner_multi_avail_resources_at (ctx4, 500, 1))); + ok (!bo, "test for avail time equality"); + + planner_multi_destroy (&ctx); + planner_multi_destroy (&ctx2); + planner_multi_destroy (&ctx3); + planner_multi_destroy (&ctx4); + + return 0; + +} + int main (int argc, char *argv[]) { - plan (79); + plan (91); test_multi_basics (); @@ -556,6 +632,8 @@ int main (int argc, char *argv[]) test_multi_add_remove (); + test_constructors_and_overload (); + done_testing (); return EXIT_SUCCESS; diff --git a/resource/policies/base/dfu_match_cb.hpp b/resource/policies/base/dfu_match_cb.hpp index d6758d9e1..841b08293 100644 --- a/resource/policies/base/dfu_match_cb.hpp +++ b/resource/policies/base/dfu_match_cb.hpp @@ -20,7 +20,7 @@ #include "resource/schema/resource_graph.hpp" #include "resource/evaluators/scoring_api.hpp" #include "resource/policies/base/matcher.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" namespace Flux { namespace resource_model { diff --git a/resource/policies/base/matcher.hpp b/resource/policies/base/matcher.hpp index 10299bec4..8a4239a24 100644 --- a/resource/policies/base/matcher.hpp +++ b/resource/policies/base/matcher.hpp @@ -18,7 +18,7 @@ #include #include "resource/libjobspec/jobspec.hpp" #include "resource/schema/data_std.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" namespace Flux { namespace resource_model { diff --git a/resource/readers/resource_reader_grug.cpp b/resource/readers/resource_reader_grug.cpp index 5be76d48f..54e0bbcc5 100644 --- a/resource/readers/resource_reader_grug.cpp +++ b/resource/readers/resource_reader_grug.cpp @@ -21,7 +21,7 @@ extern "C" { #include #include "resource/readers/resource_reader_grug.hpp" #include "resource/store/resource_graph_store.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" using namespace Flux::resource_model; diff --git a/resource/readers/resource_reader_jgf.cpp b/resource/readers/resource_reader_jgf.cpp index f08918e77..e166863bf 100644 --- a/resource/readers/resource_reader_jgf.cpp +++ b/resource/readers/resource_reader_jgf.cpp @@ -20,7 +20,7 @@ extern "C" { #include #include "resource/readers/resource_reader_jgf.hpp" #include "resource/store/resource_graph_store.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" using namespace Flux; using namespace Flux::resource_model; diff --git a/resource/readers/resource_reader_rv1exec.cpp b/resource/readers/resource_reader_rv1exec.cpp index 7eeb9bf49..507df89b3 100644 --- a/resource/readers/resource_reader_rv1exec.cpp +++ b/resource/readers/resource_reader_rv1exec.cpp @@ -20,7 +20,7 @@ extern "C" { #include #include "resource/readers/resource_reader_rv1exec.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" using namespace Flux; using namespace Flux::resource_model; diff --git a/resource/readers/resource_spec_grug.cpp b/resource/readers/resource_spec_grug.cpp index b45760d9f..d5df91e73 100644 --- a/resource/readers/resource_spec_grug.cpp +++ b/resource/readers/resource_spec_grug.cpp @@ -15,8 +15,19 @@ extern "C" { } #include +#include + +#if defined (__clang__) || (__GNUC__ <= 11) +#include +#include +#elif (__GNUC__ > 11) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #include #include +#pragma GCC diagnostic pop +#endif + #include #include #include "resource/readers/resource_spec_grug.hpp" diff --git a/resource/schema/Makefile.am b/resource/schema/Makefile.am new file mode 100644 index 000000000..02af5b3e3 --- /dev/null +++ b/resource/schema/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = test diff --git a/resource/schema/ephemeral.hpp b/resource/schema/ephemeral.hpp index 9291b97bb..7efe9ccac 100644 --- a/resource/schema/ephemeral.hpp +++ b/resource/schema/ephemeral.hpp @@ -31,7 +31,8 @@ class ephemeral_t { private: std::map m_store; - uint64_t m_epoch; + // Need to initialize; Valgrind reports errors. + uint64_t m_epoch = 0; }; } // resource_model diff --git a/resource/schema/infra_data.cpp b/resource/schema/infra_data.cpp index 3d647beb7..54dae6d25 100644 --- a/resource/schema/infra_data.cpp +++ b/resource/schema/infra_data.cpp @@ -27,10 +27,7 @@ namespace resource_model { * * ****************************************************************************/ -infra_base_t::infra_base_t () -{ - -} +infra_base_t::infra_base_t () = default; infra_base_t::infra_base_t (const infra_base_t &o) { @@ -55,69 +52,91 @@ infra_base_t::~infra_base_t () * * ****************************************************************************/ -pool_infra_t::pool_infra_t () -{ - -} +pool_infra_t::pool_infra_t () = default; pool_infra_t::pool_infra_t (const pool_infra_t &o): infra_base_t (o) { - int64_t base_time = 0; - uint64_t duration = 0; - - // don't copy the content of infrastructure tables and subtree - // planner objects. + ephemeral = o.ephemeral; colors = o.colors; + tags = o.tags; + x_spans = o.x_spans; + job2span = o.job2span; + for (auto &kv : o.subplans) { + auto sp_it = subplans.find (kv.first); + if (sp_it != subplans.end ()) { + // Need to trigger planner_multi destructor + planner_multi_destroy (&(sp_it->second)); + } planner_multi_t *p = kv.second; if (!p) continue; - base_time = planner_multi_base_time (p); - duration = planner_multi_duration (p); - size_t len = planner_multi_resources_len (p); - subplans[kv.first] = planner_multi_new (base_time, duration, - planner_multi_resource_totals (p), - planner_multi_resource_types (p), len); + subplans[kv.first] = planner_multi_copy (p); } if (o.x_checker) { - base_time = planner_base_time (o.x_checker); - duration = planner_duration (o.x_checker); - x_checker = planner_new (base_time, duration, - planner_resource_total (o.x_checker), - planner_resource_type (o.x_checker)); + if (!x_checker) { + x_checker = planner_copy (o.x_checker); + } else { + planner_assign (x_checker, o.x_checker); + } } } pool_infra_t &pool_infra_t::operator= (const pool_infra_t &o) { - int64_t base_time = 0; - uint64_t duration = 0; + scrub (); + subplans.clear (); - // don't copy the content of infrastructure tables and subtree - // planner objects. infra_base_t::operator= (o); + ephemeral = o.ephemeral; colors = o.colors; + tags = o.tags; + x_spans = o.x_spans; + job2span = o.job2span; + for (auto &kv : o.subplans) { planner_multi_t *p = kv.second; if (!p) continue; - base_time = planner_multi_base_time (p); - duration = planner_multi_duration (p); - size_t len = planner_multi_resources_len (p); - subplans[kv.first] = planner_multi_new (base_time, duration, - planner_multi_resource_totals (p), - planner_multi_resource_types (p), len); + subplans[kv.first] = planner_multi_copy (p); } if (o.x_checker) { - base_time = planner_base_time (o.x_checker); - duration = planner_duration (o.x_checker); - x_checker = planner_new (base_time, duration, - planner_resource_total (o.x_checker), - planner_resource_type (o.x_checker)); + if (!x_checker) { + x_checker = planner_copy (o.x_checker); + } else { + planner_assign (x_checker, o.x_checker); + } } return *this; } +bool pool_infra_t::operator== (const pool_infra_t &o) const +{ + if (tags != o.tags) + return false; + if (x_spans != o.x_spans) + return false; + if (job2span != o.job2span) + return false; + if (colors != o.colors) + return false; + if (!planners_equal (x_checker, o.x_checker)) + return false; + if (subplans.size () != o.subplans.size ()) + return false; + for (auto const &this_it : subplans) { + auto const other = o.subplans.find (this_it.first); + if (other == o.subplans.end ()) + return false; + if (this_it.first != other->first) + return false; + if (!planner_multis_equal (this_it.second, other->second)) + return false; + } + + return true; +} + pool_infra_t::~pool_infra_t () { for (auto &kv : subplans) @@ -146,10 +165,7 @@ void pool_infra_t::scrub () * * ****************************************************************************/ -relation_infra_t::relation_infra_t () -{ - -} +relation_infra_t::relation_infra_t () = default; relation_infra_t::relation_infra_t (const relation_infra_t &o): infra_base_t (o) { diff --git a/resource/schema/infra_data.hpp b/resource/schema/infra_data.hpp index 3fdc2a028..f61bc7d4b 100644 --- a/resource/schema/infra_data.hpp +++ b/resource/schema/infra_data.hpp @@ -16,7 +16,7 @@ #include #include "resource/schema/data_std.hpp" #include "resource/schema/ephemeral.hpp" -#include "resource/planner/planner_multi.h" +#include "resource/planner/c/planner_multi.h" namespace Flux { namespace resource_model { @@ -38,6 +38,7 @@ struct pool_infra_t : public infra_base_t { pool_infra_t (); pool_infra_t (const pool_infra_t &o); pool_infra_t &operator= (const pool_infra_t &o); + bool operator== (const pool_infra_t &o) const; virtual ~pool_infra_t (); virtual void scrub (); diff --git a/resource/schema/resource_data.hpp b/resource/schema/resource_data.hpp index c03453b39..5b529c2c1 100644 --- a/resource/schema/resource_data.hpp +++ b/resource/schema/resource_data.hpp @@ -22,7 +22,7 @@ #include "resource/schema/data_std.hpp" #include "resource/schema/sched_data.hpp" #include "resource/schema/infra_data.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" namespace Flux { namespace resource_model { diff --git a/resource/schema/sched_data.cpp b/resource/schema/sched_data.cpp index e85dc08ba..bea20482f 100644 --- a/resource/schema/sched_data.cpp +++ b/resource/schema/sched_data.cpp @@ -19,44 +19,63 @@ extern "C" { namespace Flux { namespace resource_model { -schedule_t::schedule_t () -{ - -} +schedule_t::schedule_t () = default; schedule_t::schedule_t (const schedule_t &o) { - int64_t base_time = 0; - uint64_t duration = 0; + allocations = o.allocations; + reservations = o.reservations; - // copy constructor does not copy the contents - // of the schedule tables and of the planner objects. - if (o.plans) { - base_time = planner_base_time (o.plans); - duration = planner_duration (o.plans); - plans = planner_new (base_time, duration, - planner_resource_total (o.plans), - planner_resource_type (o.plans)); + if (plans) { + if (o.plans) { + planner_assign (plans, o.plans); + } else { + planner_destroy (&plans); + } + } else { + if (o.plans) { + plans = planner_copy (o.plans); + if (!plans) + throw std::runtime_error ("ERROR copying planners\n"); + } } } schedule_t &schedule_t::operator= (const schedule_t &o) { - int64_t base_time = 0; - uint64_t duration = 0; - - // assign operator does not copy the contents - // of the schedule tables and of the planner objects. - if (o.plans) { - base_time = planner_base_time (o.plans); - duration = planner_duration (o.plans); - plans = planner_new (base_time, duration, - planner_resource_total (o.plans), - planner_resource_type (o.plans)); + allocations.clear (); + reservations.clear (); + allocations = o.allocations; + reservations = o.reservations; + + if (plans) { + if (o.plans) { + planner_assign (plans, o.plans); + } else { + planner_destroy (&plans); + } + } else { + if (o.plans) { + plans = planner_copy (o.plans); + if (!plans) + throw std::runtime_error ("ERROR copying planners\n"); + } } return *this; } +bool schedule_t::operator== (const schedule_t &o) const +{ + if (allocations != o.allocations) + return false; + if (reservations != o.reservations) + return false; + if (!planners_equal (plans, o.plans)) + return false; + + return true; +} + schedule_t::~schedule_t () { if (plans) diff --git a/resource/schema/sched_data.hpp b/resource/schema/sched_data.hpp index 455cec8cc..2276316db 100644 --- a/resource/schema/sched_data.hpp +++ b/resource/schema/sched_data.hpp @@ -13,7 +13,8 @@ #include #include -#include "resource/planner/planner.h" +#include +#include "resource/planner/c/planner.h" namespace Flux { namespace resource_model { @@ -23,6 +24,7 @@ struct schedule_t { schedule_t (); schedule_t (const schedule_t &o); schedule_t &operator= (const schedule_t &o); + bool operator== (const schedule_t &o) const; ~schedule_t (); std::map allocations; diff --git a/resource/schema/test/Makefile.am b/resource/schema/test/Makefile.am new file mode 100644 index 000000000..56762a90f --- /dev/null +++ b/resource/schema/test/Makefile.am @@ -0,0 +1,31 @@ +AM_CXXFLAGS = \ + $(WARNING_CXXFLAGS) \ + $(CODE_COVERAGE_CXXFLAGS) + +AM_LDFLAGS = $(CODE_COVERAGE_LDFLAGS) + +AM_CPPFLAGS = -I$(top_srcdir) $(CZMQ_CFLAGS) $(FLUX_CORE_CFLAGS) + +TESTS_ENVIRONMENT = \ + TESTRESRC_INPUT_FILE="$(abs_top_srcdir)/conf/hype.lua" + +TESTS = schema_test01 schema_test02 + +check_PROGRAMS = $(TESTS) +schema_test01_SOURCES = schema_test01.cpp +schema_test01_CXXFLAGS = \ + $(AM_CXXFLAGS) \ + -I$(top_srcdir)/resource/schema +schema_test01_LDADD = \ + $(top_builddir)/resource/libresource.la \ + $(top_builddir)/src/common/libtap/libtap.la \ + $(CZMQ_LIBS) + +schema_test02_SOURCES = schema_test02.cpp +schema_test02_CXXFLAGS = \ + $(AM_CXXFLAGS) \ + -I$(top_srcdir)/resource/schema +schema_test02_LDADD = \ + $(top_builddir)/resource/libresource.la \ + $(top_builddir)/src/common/libtap/libtap.la \ + $(CZMQ_LIBS) diff --git a/resource/schema/test/schema_test01.cpp b/resource/schema/test/schema_test01.cpp new file mode 100644 index 000000000..c5bb6d380 --- /dev/null +++ b/resource/schema/test/schema_test01.cpp @@ -0,0 +1,98 @@ +/*****************************************************************************\ + * Copyright 2023 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\*****************************************************************************/ + +#if HAVE_CONFIG_H +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "src/common/libtap/tap.h" +#include "sched_data.hpp" + +using namespace Flux::resource_model; + +static int test_constructors_and_overload () +{ + bool bo = false; + schedule_t *sched1, *sched2, *sched3, *sched4, *sched5 = nullptr; + uint64_t resource_total = 10; + const char resource_type[] = "1"; + + sched1 = new schedule_t (); + sched1->allocations[0] = 0; + sched1->reservations[0] = 0; + sched1->plans = planner_new (0, 9999, resource_total, resource_type); + + sched2 = new schedule_t (); + + bo = (bo || (*sched1 == *sched2)); + ok (!bo, "initialized schedule_t not equal to uninitialized schedule_t"); + + sched2->allocations[0] = 0; + sched2->reservations[0] = 0; + sched2->plans = planner_new (0, 9999, resource_total, resource_type); + + bo = (bo || !(*sched1 == *sched2)); + ok (!bo, "initialized schedule_t equal to identically initialized schedule_t"); + + sched3 = new schedule_t (*sched1); + bo = (bo || !(*sched3 == *sched1)); + ok (!bo, "copied schedule_t equal to rhs schedule_t"); + + sched4 = new schedule_t (); + *sched4 = *sched1; + bo = (bo || !(*sched4 == *sched1)); + ok (!bo, "assigned schedule_t equal to rhs schedule_t"); + + sched4->allocations[0] = 1; + bo = (bo || (*sched4 == *sched1)); + ok (!bo, "mutated schedule_t not equal to original schedule_t"); + + sched5 = new schedule_t (); + sched5->allocations[0] = 0; + sched5->reservations[0] = 0; + sched5->plans = planner_new (1, 9999, resource_total, resource_type); + bo = (bo || (*sched5 == *sched1)); + ok (!bo, "schedule_t initialized with different planner not equal to original schedule_t"); + + *sched5 = *sched1; + bo = (bo || !(*sched5 == *sched1)); + ok (!bo, "schedule_t assignment overload works with state"); + + delete sched1; + delete sched2; + delete sched3; + delete sched4; + delete sched5; + + return 0; +} + + +int main (int argc, char *argv[]) +{ + plan (7); + + test_constructors_and_overload (); + + done_testing (); + + return EXIT_SUCCESS; +} + +/* + * vi: ts=4 sw=4 expandtab + */ diff --git a/resource/schema/test/schema_test02.cpp b/resource/schema/test/schema_test02.cpp new file mode 100644 index 000000000..37f0ec7d6 --- /dev/null +++ b/resource/schema/test/schema_test02.cpp @@ -0,0 +1,185 @@ +/*****************************************************************************\ + * Copyright 2023 Lawrence Livermore National Security, LLC + * (c.f. AUTHORS, NOTICE.LLNS, LICENSE) + * + * This file is part of the Flux resource manager framework. + * For details, see https://github.com/flux-framework. + * + * SPDX-License-Identifier: LGPL-3.0 +\*****************************************************************************/ + +#if HAVE_CONFIG_H +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "src/common/libtap/tap.h" +#include "infra_data.hpp" + +using namespace Flux::resource_model; + +static int test_constructors_and_overload () +{ + bool bo = false; + size_t len = 5; + pool_infra_t *infra1, *infra2, *infra3, *infra4, *infra5 = nullptr; + pool_infra_t *infra6, *infra7, *infra8, *infra9, *infra10 = nullptr; + uint64_t resource_total = 100000; + const char resource_type[] = "core"; + const uint64_t resource_totals[] = {10, 20, 30, 40, 50}; + const char *resource_types[] = {"A", "B", "C", "D", "E"}; + + infra1 = new pool_infra_t (); + infra1->tags[0] = 0; + infra1->x_spans[0] = 0; + infra1->job2span[0] = 0; + infra1->colors["containment"] = 0; + infra1->colors["network"] = 1; + infra1->x_checker = planner_new (0, INT64_MAX, resource_total, resource_type); + infra1->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + infra1->subplans["network"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + + infra2 = new pool_infra_t (); + + bo = (bo || (*infra1 == *infra2)); + ok (!bo, "initialized pool_infra_t not equal to uninitialized pool_infra_t"); + + infra2->tags[0] = 0; + infra2->x_spans[0] = 0; + infra2->job2span[0] = 0; + infra2->colors["containment"] = 0; + infra2->colors["network"] = 1; + infra2->x_checker = planner_new (0, INT64_MAX, resource_total, resource_type); + infra2->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + infra2->subplans["network"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + bo = (bo || !(*infra1 == *infra2)); + ok (!bo, "initialized pool_infra_t equal to identically initialized pool_infra_t"); + + infra3 = new pool_infra_t (*infra1); + bo = (bo || !(*infra3 == *infra1)); + ok (!bo, "copied pool_infra_t equal to rhs pool_infra_t"); + + infra4 = new pool_infra_t (); + *infra4 = *infra1; + bo = (bo || !(*infra4 == *infra1)); + ok (!bo, "assigned pool_infra_t equal to rhs pool_infra_t"); + + infra4->job2span[0] = 1; + bo = (bo || (*infra4 == *infra1)); + ok (!bo, "mutated pool_infra_t not equal to original pool_infra_t"); + + infra5 = new pool_infra_t (); + infra5->tags[0] = 0; + infra5->x_spans[0] = 0; + infra5->job2span[0] = 0; + infra5->colors["containment"] = 0; + infra5->colors["network"] = 1; + infra5->x_checker = planner_new (1, INT64_MAX, resource_total, resource_type); + infra5->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + infra5->subplans["network"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + bo = (bo || (*infra5 == *infra1)); + ok (!bo, "pool_infra_t initialized with different x_checker not equal to original pool_infra_t"); + + infra6 = new pool_infra_t (); + infra6->tags[0] = 0; + infra6->x_spans[0] = 0; + infra6->job2span[0] = 0; + infra6->colors["containment"] = 0; + infra6->colors["storage"] = 1; + infra6->x_checker = planner_new (0, INT64_MAX, resource_total, resource_type); + infra6->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + infra6->subplans["network"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + bo = (bo || (*infra6 == *infra1)); + ok (!bo, "pool_infra_t initialized with different colors not equal to original pool_infra_t"); + + infra7 = new pool_infra_t (); + infra7->tags[0] = 0; + infra7->x_spans[0] = 0; + infra7->job2span[0] = 0; + infra7->colors["containment"] = 0; + infra7->colors["network"] = 1; + infra7->x_checker = planner_new (0, INT64_MAX, resource_total, resource_type); + infra7->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + infra7->subplans["storage"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + bo = (bo || (*infra7 == *infra1)); + ok (!bo, "pool_infra_t initialized with different subplan systems not equal to original pool_infra_t"); + + infra8 = new pool_infra_t (); + infra8->tags[0] = 0; + infra8->x_spans[0] = 0; + infra8->job2span[0] = 0; + infra8->colors["containment"] = 0; + infra8->colors["network"] = 1; + infra8->x_checker = planner_new (0, INT64_MAX, resource_total, resource_type); + infra8->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + infra8->subplans["network"] = + planner_multi_new (1, INT64_MAX, resource_totals, resource_types, len); + bo = (bo || (*infra8 == *infra1)); + ok (!bo, "pool_infra_t initialized with different subplan planner_multis not equal to original pool_infra_t"); + + infra9 = new pool_infra_t (); + infra9->tags[0] = 0; + infra9->x_spans[0] = 0; + infra9->job2span[0] = 0; + infra9->colors["containment"] = 0; + infra9->colors["network"] = 1; + infra9->x_checker = planner_new (0, INT64_MAX, resource_total, resource_type); + infra9->subplans["containment"] = + planner_multi_new (0, INT64_MAX, resource_totals, resource_types, len); + bo = (bo || (*infra9 == *infra1)); + ok (!bo, "pool_infra_t initialized with different subplan planner_multis len not equal to original pool_infra_t"); + + *infra9 = *infra1; + bo = (bo || !(*infra9 == *infra1)); + ok (!bo, "pool_infra_t assignment overload works with state"); + + infra10 = new pool_infra_t (*infra9); + bo = (bo || !(*infra10 == *infra1)); + ok (!bo, "pool_infra_t ctor works"); + + delete infra1; + delete infra2; + delete infra3; + delete infra4; + delete infra5; + delete infra6; + delete infra7; + delete infra8; + delete infra9; + delete infra10; + + return 0; +} + + +int main (int argc, char *argv[]) +{ + plan (12); + + test_constructors_and_overload (); + + done_testing (); + + return EXIT_SUCCESS; +} + +/* + * vi: ts=4 sw=4 expandtab + */ diff --git a/resource/traversers/dfu_impl.hpp b/resource/traversers/dfu_impl.hpp index 0f5a15c5e..23048c01a 100644 --- a/resource/traversers/dfu_impl.hpp +++ b/resource/traversers/dfu_impl.hpp @@ -27,7 +27,7 @@ #include "resource/writers/match_writers.hpp" #include "resource/store/resource_graph_store.hpp" #include "resource/readers/resource_reader_base.hpp" -#include "resource/planner/planner.h" +#include "resource/planner/c/planner.h" namespace Flux { namespace resource_model { diff --git a/resource/utilities/command.cpp b/resource/utilities/command.cpp index ea450175a..db598db26 100644 --- a/resource/utilities/command.cpp +++ b/resource/utilities/command.cpp @@ -41,7 +41,7 @@ command_t commands[] = { { "update", "u", cmd_update, "Update resources with a JGF subgraph (subcmd: " "allocate | reserve): " "resource-query> update allocate jgf_file jobid starttime duration" }, - { "attach", "j", cmd_attach, "Experimental: attach a JGF subgraph to the " + { "attach", "j", cmd_attach, "Attach a JGF subgraph to the " "resource graph: resource-query> attach jgf_file" }, { "find", "f", cmd_find, "Find resources matched with criteria " "(predicates: status={up|down} sched-now={allocated|free} sched-future={reserved|free}): " @@ -453,11 +453,6 @@ int cmd_attach (std::shared_ptr &ctx, std::cerr << "ERROR: malformed command" << std::endl; return 0; } - if ( !(ctx->allocations.empty () && ctx->reservations.empty ())) { - std::cerr << "ERROR: attach isn't currently supported when an" - << " allocation or reservation exists" << std::endl; - return 0; - } attach (ctx, args); } catch (std::ifstream::failure &e) { diff --git a/t/data/resource/commands/elastic/cmds04.in b/t/data/resource/commands/elastic/cmds04.in index 9a8f6d46b..a83299f05 100644 --- a/t/data/resource/commands/elastic/cmds04.in +++ b/t/data/resource/commands/elastic/cmds04.in @@ -1,3 +1,13 @@ -attach @TEST_SRCDIR@/data/resource/jgfs/power.json +find sched-now=free +match allocate @TEST_SRCDIR@/data/resource/jobspecs/elastic/test-ma-node.yaml +match allocate_orelse_reserve @TEST_SRCDIR@/data/resource/jobspecs/elastic/test-ma-node.yaml find status=up +find sched-now=allocated +find sched-future=reserved +match allocate @TEST_SRCDIR@/data/resource/jobspecs/elastic/test-ma-node.yaml +attach @TEST_SRCDIR@/data/resource/jgfs/elastic/node-add-test.json +find status=up +find sched-now=allocated +find sched-future=reserved +match allocate @TEST_SRCDIR@/data/resource/jobspecs/elastic/test-ma-node.yaml quit diff --git a/t/data/resource/commands/elastic/cmds05.in b/t/data/resource/commands/elastic/cmds05.in index 8d36c4504..9a8f6d46b 100644 --- a/t/data/resource/commands/elastic/cmds05.in +++ b/t/data/resource/commands/elastic/cmds05.in @@ -1,4 +1,3 @@ -attach @TEST_SRCDIR@/data/resource/jgfs/elastic/node-test.json +attach @TEST_SRCDIR@/data/resource/jgfs/power.json find status=up -find sched-now=allocated quit diff --git a/t/data/resource/commands/elastic/cmds06.in b/t/data/resource/commands/elastic/cmds06.in index 326c8ea16..8d36c4504 100644 --- a/t/data/resource/commands/elastic/cmds06.in +++ b/t/data/resource/commands/elastic/cmds06.in @@ -1,4 +1,4 @@ -attach @TEST_SRCDIR@/data/resource/jgfs/elastic/dne.json invalid-option +attach @TEST_SRCDIR@/data/resource/jgfs/elastic/node-test.json find status=up find sched-now=allocated quit diff --git a/t/data/resource/commands/elastic/cmds07.in b/t/data/resource/commands/elastic/cmds07.in index 4a8b2657b..326c8ea16 100644 --- a/t/data/resource/commands/elastic/cmds07.in +++ b/t/data/resource/commands/elastic/cmds07.in @@ -1,4 +1,4 @@ -attach @TEST_SRCDIR@/data/resource/jgfs/elastic/dne.json +attach @TEST_SRCDIR@/data/resource/jgfs/elastic/dne.json invalid-option find status=up find sched-now=allocated quit diff --git a/t/data/resource/commands/elastic/cmds08.in b/t/data/resource/commands/elastic/cmds08.in new file mode 100644 index 000000000..4a8b2657b --- /dev/null +++ b/t/data/resource/commands/elastic/cmds08.in @@ -0,0 +1,4 @@ +attach @TEST_SRCDIR@/data/resource/jgfs/elastic/dne.json +find status=up +find sched-now=allocated +quit diff --git a/t/data/resource/expected/elastic/003.R.err b/t/data/resource/expected/elastic/003.R.err deleted file mode 100644 index 308115c1e..000000000 --- a/t/data/resource/expected/elastic/003.R.err +++ /dev/null @@ -1 +0,0 @@ -ERROR: attach isn't currently supported when an allocation or reservation exists diff --git a/t/data/resource/expected/elastic/003.R.out b/t/data/resource/expected/elastic/003.R.out index e5a9e8daa..8cce9fcde 100644 --- a/t/data/resource/expected/elastic/003.R.out +++ b/t/data/resource/expected/elastic/003.R.out @@ -12,7 +12,7 @@ INFO: ============================= INFO: ============================= INFO: EXPRESSION="sched-now=allocated" INFO: ============================= -{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "329", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 329, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core0"}}}, {"id": "330", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 330, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core1"}}}, {"id": "331", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 331, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core2"}}}, {"id": "332", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 332, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core3"}}}, {"id": "333", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 333, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core4"}}}, {"id": "334", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 334, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core5"}}}, {"id": "335", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 335, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core6"}}}, {"id": "336", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 336, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core7"}}}, {"id": "337", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 337, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core8"}}}, {"id": "338", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 338, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core9"}}}, {"id": "339", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 339, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core10"}}}, {"id": "340", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 340, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core11"}}}, {"id": "341", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 341, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core12"}}}, {"id": "342", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 342, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core13"}}}, {"id": "343", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 343, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core14"}}}, {"id": "344", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 344, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core15"}}}, {"id": "345", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 345, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core16"}}}, {"id": "346", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 346, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core17"}}}, {"id": "83", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 83, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0"}}}, {"id": "347", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 347, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core18"}}}, {"id": "348", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 348, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core19"}}}, {"id": "349", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 349, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core20"}}}, {"id": "350", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 350, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core21"}}}, {"id": "351", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 351, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core22"}}}, {"id": "352", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 352, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core23"}}}, {"id": "353", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 353, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core24"}}}, {"id": "354", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 354, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core25"}}}, {"id": "355", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 355, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core26"}}}, {"id": "356", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 356, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core27"}}}, {"id": "357", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 357, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core28"}}}, {"id": "358", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 358, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core29"}}}, {"id": "359", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 359, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core30"}}}, {"id": "360", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 360, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core31"}}}, {"id": "361", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 361, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core32"}}}, {"id": "362", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 362, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core33"}}}, {"id": "363", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 363, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core34"}}}, {"id": "364", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 364, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core35"}}}, {"id": "84", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 84, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1"}}}, {"id": "8", "metadata": {"type": "node", "basename": "node", "name": "node3", "id": 3, "uniq_id": 8, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "329", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "330", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "331", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "332", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "333", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "334", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "335", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "336", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "337", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "338", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "339", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "340", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "341", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "342", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "343", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "344", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "345", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "346", "metadata": {"name": {"containment": "contains"}}}, {"source": "8", "target": "83", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "347", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "348", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "349", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "350", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "351", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "352", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "353", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "354", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "355", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "356", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "357", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "358", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "359", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "360", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "361", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "362", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "363", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "364", "metadata": {"name": {"containment": "contains"}}}, {"source": "8", "target": "84", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "8", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} INFO: ============================= INFO: EXPRESSION="status=up" INFO: ============================= diff --git a/t/data/resource/expected/elastic/004.R.out b/t/data/resource/expected/elastic/004.R.out index 105892efa..5a7e10996 100644 --- a/t/data/resource/expected/elastic/004.R.out +++ b/t/data/resource/expected/elastic/004.R.out @@ -1,4 +1,50 @@ {"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} INFO: ============================= +INFO: EXPRESSION="sched-now=free" +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": false, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": false, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: JOBID=1 +INFO: RESOURCES=ALLOCATED +INFO: SCHEDULED AT=Now +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": false, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": false, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: JOBID=2 +INFO: RESOURCES=RESERVED +INFO: SCHEDULED AT=3600 +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: EXPRESSION="status=up" +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: EXPRESSION="sched-now=allocated" +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: EXPRESSION="sched-future=reserved" +INFO: ============================= +INFO: ============================= +INFO: No matching resources found +INFO: JOBID=3 +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "329", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 329, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core0"}}}, {"id": "330", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 330, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core1"}}}, {"id": "331", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 331, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core2"}}}, {"id": "332", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 332, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core3"}}}, {"id": "333", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 333, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core4"}}}, {"id": "334", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 334, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core5"}}}, {"id": "335", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 335, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core6"}}}, {"id": "336", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 336, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core7"}}}, {"id": "337", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 337, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core8"}}}, {"id": "338", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 338, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core9"}}}, {"id": "339", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 339, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core10"}}}, {"id": "340", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 340, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core11"}}}, {"id": "341", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 341, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core12"}}}, {"id": "342", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 342, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core13"}}}, {"id": "343", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 343, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core14"}}}, {"id": "344", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 344, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core15"}}}, {"id": "345", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 345, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core16"}}}, {"id": "346", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 346, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core17"}}}, {"id": "83", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 83, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0"}}}, {"id": "347", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 347, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core18"}}}, {"id": "348", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 348, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core19"}}}, {"id": "349", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 349, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core20"}}}, {"id": "350", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 350, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core21"}}}, {"id": "351", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 351, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core22"}}}, {"id": "352", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 352, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core23"}}}, {"id": "353", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 353, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core24"}}}, {"id": "354", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 354, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core25"}}}, {"id": "355", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 355, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core26"}}}, {"id": "356", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 356, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core27"}}}, {"id": "357", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 357, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core28"}}}, {"id": "358", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 358, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core29"}}}, {"id": "359", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 359, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core30"}}}, {"id": "360", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 360, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core31"}}}, {"id": "361", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 361, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core32"}}}, {"id": "362", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 362, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core33"}}}, {"id": "363", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 363, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core34"}}}, {"id": "364", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 364, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core35"}}}, {"id": "84", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 84, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1"}}}, {"id": "8", "metadata": {"type": "node", "basename": "node", "name": "node3", "id": 3, "uniq_id": 8, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "329", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "330", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "331", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "332", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "333", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "334", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "335", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "336", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "337", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "338", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "339", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "340", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "341", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "342", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "343", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "344", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "345", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "346", "metadata": {"name": {"containment": "contains"}}}, {"source": "8", "target": "83", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "347", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "348", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "349", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "350", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "351", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "352", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "353", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "354", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "355", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "356", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "357", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "358", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "359", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "360", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "361", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "362", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "363", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "364", "metadata": {"name": {"containment": "contains"}}}, {"source": "8", "target": "84", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "8", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= INFO: EXPRESSION="status=up" INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: EXPRESSION="sched-now=allocated" +INFO: ============================= +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: EXPRESSION="sched-future=reserved" +INFO: ============================= +{"graph": {"nodes": [{"id": "329", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 329, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core0"}}}, {"id": "330", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 330, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core1"}}}, {"id": "331", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 331, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core2"}}}, {"id": "332", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 332, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core3"}}}, {"id": "333", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 333, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core4"}}}, {"id": "334", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 334, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core5"}}}, {"id": "335", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 335, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core6"}}}, {"id": "336", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 336, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core7"}}}, {"id": "337", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 337, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core8"}}}, {"id": "338", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 338, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core9"}}}, {"id": "339", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 339, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core10"}}}, {"id": "340", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 340, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core11"}}}, {"id": "341", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 341, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core12"}}}, {"id": "342", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 342, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core13"}}}, {"id": "343", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 343, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core14"}}}, {"id": "344", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 344, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core15"}}}, {"id": "345", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 345, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core16"}}}, {"id": "346", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 346, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0/core17"}}}, {"id": "83", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 83, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket0"}}}, {"id": "347", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 347, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core18"}}}, {"id": "348", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 348, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core19"}}}, {"id": "349", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 349, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core20"}}}, {"id": "350", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 350, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core21"}}}, {"id": "351", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 351, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core22"}}}, {"id": "352", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 352, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core23"}}}, {"id": "353", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 353, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core24"}}}, {"id": "354", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 354, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core25"}}}, {"id": "355", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 355, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core26"}}}, {"id": "356", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 356, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core27"}}}, {"id": "357", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 357, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core28"}}}, {"id": "358", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 358, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core29"}}}, {"id": "359", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 359, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core30"}}}, {"id": "360", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 360, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core31"}}}, {"id": "361", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 361, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core32"}}}, {"id": "362", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 362, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core33"}}}, {"id": "363", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 363, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core34"}}}, {"id": "364", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 364, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1/core35"}}}, {"id": "84", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 84, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3/socket1"}}}, {"id": "8", "metadata": {"type": "node", "basename": "node", "name": "node3", "id": 3, "uniq_id": 8, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node3"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": false, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": false, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "83", "target": "329", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "330", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "331", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "332", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "333", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "334", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "335", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "336", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "337", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "338", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "339", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "340", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "341", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "342", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "343", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "344", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "345", "metadata": {"name": {"containment": "contains"}}}, {"source": "83", "target": "346", "metadata": {"name": {"containment": "contains"}}}, {"source": "8", "target": "83", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "347", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "348", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "349", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "350", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "351", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "352", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "353", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "354", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "355", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "356", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "357", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "358", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "359", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "360", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "361", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "362", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "363", "metadata": {"name": {"containment": "contains"}}}, {"source": "84", "target": "364", "metadata": {"name": {"containment": "contains"}}}, {"source": "8", "target": "84", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "8", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: JOBID=4 +INFO: RESOURCES=ALLOCATED +INFO: SCHEDULED AT=Now +INFO: ============================= diff --git a/t/data/resource/expected/elastic/004.R.err b/t/data/resource/expected/elastic/005.R.err similarity index 100% rename from t/data/resource/expected/elastic/004.R.err rename to t/data/resource/expected/elastic/005.R.err diff --git a/t/data/resource/expected/elastic/005.R.out b/t/data/resource/expected/elastic/005.R.out index f500ca185..105892efa 100644 --- a/t/data/resource/expected/elastic/005.R.out +++ b/t/data/resource/expected/elastic/005.R.out @@ -2,6 +2,3 @@ INFO: ============================= INFO: EXPRESSION="status=up" INFO: ============================= -INFO: ============================= -INFO: EXPRESSION="sched-now=allocated" -INFO: ============================= diff --git a/t/data/resource/expected/elastic/006.R.err b/t/data/resource/expected/elastic/006.R.err deleted file mode 100644 index d6ec0a757..000000000 --- a/t/data/resource/expected/elastic/006.R.err +++ /dev/null @@ -1 +0,0 @@ -ERROR: malformed command diff --git a/t/data/resource/expected/elastic/007.R.err b/t/data/resource/expected/elastic/007.R.err index 2b7aa7561..d6ec0a757 100644 --- a/t/data/resource/expected/elastic/007.R.err +++ b/t/data/resource/expected/elastic/007.R.err @@ -1 +1 @@ -ERROR: can't open @TEST_SRCDIR@/data/resource/jgfs/elastic/dne.json +ERROR: malformed command diff --git a/t/data/resource/expected/elastic/008.R.err b/t/data/resource/expected/elastic/008.R.err new file mode 100644 index 000000000..2b7aa7561 --- /dev/null +++ b/t/data/resource/expected/elastic/008.R.err @@ -0,0 +1 @@ +ERROR: can't open @TEST_SRCDIR@/data/resource/jgfs/elastic/dne.json diff --git a/t/data/resource/expected/elastic/008.R.out b/t/data/resource/expected/elastic/008.R.out new file mode 100644 index 000000000..f500ca185 --- /dev/null +++ b/t/data/resource/expected/elastic/008.R.out @@ -0,0 +1,7 @@ +{"graph": {"nodes": [{"id": "221", "metadata": {"type": "core", "basename": "core", "name": "core0", "id": 0, "uniq_id": 221, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core0"}}}, {"id": "222", "metadata": {"type": "core", "basename": "core", "name": "core1", "id": 1, "uniq_id": 222, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core1"}}}, {"id": "223", "metadata": {"type": "core", "basename": "core", "name": "core2", "id": 2, "uniq_id": 223, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core2"}}}, {"id": "224", "metadata": {"type": "core", "basename": "core", "name": "core3", "id": 3, "uniq_id": 224, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core3"}}}, {"id": "225", "metadata": {"type": "core", "basename": "core", "name": "core4", "id": 4, "uniq_id": 225, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core4"}}}, {"id": "226", "metadata": {"type": "core", "basename": "core", "name": "core5", "id": 5, "uniq_id": 226, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core5"}}}, {"id": "227", "metadata": {"type": "core", "basename": "core", "name": "core6", "id": 6, "uniq_id": 227, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core6"}}}, {"id": "228", "metadata": {"type": "core", "basename": "core", "name": "core7", "id": 7, "uniq_id": 228, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core7"}}}, {"id": "229", "metadata": {"type": "core", "basename": "core", "name": "core8", "id": 8, "uniq_id": 229, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core8"}}}, {"id": "230", "metadata": {"type": "core", "basename": "core", "name": "core9", "id": 9, "uniq_id": 230, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core9"}}}, {"id": "231", "metadata": {"type": "core", "basename": "core", "name": "core10", "id": 10, "uniq_id": 231, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core10"}}}, {"id": "232", "metadata": {"type": "core", "basename": "core", "name": "core11", "id": 11, "uniq_id": 232, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core11"}}}, {"id": "233", "metadata": {"type": "core", "basename": "core", "name": "core12", "id": 12, "uniq_id": 233, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core12"}}}, {"id": "234", "metadata": {"type": "core", "basename": "core", "name": "core13", "id": 13, "uniq_id": 234, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core13"}}}, {"id": "235", "metadata": {"type": "core", "basename": "core", "name": "core14", "id": 14, "uniq_id": 235, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core14"}}}, {"id": "236", "metadata": {"type": "core", "basename": "core", "name": "core15", "id": 15, "uniq_id": 236, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core15"}}}, {"id": "237", "metadata": {"type": "core", "basename": "core", "name": "core16", "id": 16, "uniq_id": 237, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core16"}}}, {"id": "238", "metadata": {"type": "core", "basename": "core", "name": "core17", "id": 17, "uniq_id": 238, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0/core17"}}}, {"id": "77", "metadata": {"type": "socket", "basename": "socket", "name": "socket0", "id": 0, "uniq_id": 77, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket0"}}}, {"id": "239", "metadata": {"type": "core", "basename": "core", "name": "core18", "id": 18, "uniq_id": 239, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core18"}}}, {"id": "240", "metadata": {"type": "core", "basename": "core", "name": "core19", "id": 19, "uniq_id": 240, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core19"}}}, {"id": "241", "metadata": {"type": "core", "basename": "core", "name": "core20", "id": 20, "uniq_id": 241, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core20"}}}, {"id": "242", "metadata": {"type": "core", "basename": "core", "name": "core21", "id": 21, "uniq_id": 242, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core21"}}}, {"id": "243", "metadata": {"type": "core", "basename": "core", "name": "core22", "id": 22, "uniq_id": 243, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core22"}}}, {"id": "244", "metadata": {"type": "core", "basename": "core", "name": "core23", "id": 23, "uniq_id": 244, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core23"}}}, {"id": "245", "metadata": {"type": "core", "basename": "core", "name": "core24", "id": 24, "uniq_id": 245, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core24"}}}, {"id": "246", "metadata": {"type": "core", "basename": "core", "name": "core25", "id": 25, "uniq_id": 246, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core25"}}}, {"id": "247", "metadata": {"type": "core", "basename": "core", "name": "core26", "id": 26, "uniq_id": 247, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core26"}}}, {"id": "248", "metadata": {"type": "core", "basename": "core", "name": "core27", "id": 27, "uniq_id": 248, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core27"}}}, {"id": "249", "metadata": {"type": "core", "basename": "core", "name": "core28", "id": 28, "uniq_id": 249, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core28"}}}, {"id": "250", "metadata": {"type": "core", "basename": "core", "name": "core29", "id": 29, "uniq_id": 250, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core29"}}}, {"id": "251", "metadata": {"type": "core", "basename": "core", "name": "core30", "id": 30, "uniq_id": 251, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core30"}}}, {"id": "252", "metadata": {"type": "core", "basename": "core", "name": "core31", "id": 31, "uniq_id": 252, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core31"}}}, {"id": "253", "metadata": {"type": "core", "basename": "core", "name": "core32", "id": 32, "uniq_id": 253, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core32"}}}, {"id": "254", "metadata": {"type": "core", "basename": "core", "name": "core33", "id": 33, "uniq_id": 254, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core33"}}}, {"id": "255", "metadata": {"type": "core", "basename": "core", "name": "core34", "id": 34, "uniq_id": 255, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core34"}}}, {"id": "256", "metadata": {"type": "core", "basename": "core", "name": "core35", "id": 35, "uniq_id": 256, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1/core35"}}}, {"id": "78", "metadata": {"type": "socket", "basename": "socket", "name": "socket1", "id": 1, "uniq_id": 78, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0/socket1"}}}, {"id": "5", "metadata": {"type": "node", "basename": "node", "name": "node0", "id": 0, "uniq_id": 5, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0/node0"}}}, {"id": "1", "metadata": {"type": "rack", "basename": "rack", "name": "rack0", "id": 0, "uniq_id": 1, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0/rack0"}}}, {"id": "0", "metadata": {"type": "cluster", "basename": "medium", "name": "medium0", "id": 0, "uniq_id": 0, "rank": -1, "exclusive": true, "unit": "", "size": 1, "paths": {"containment": "/medium0"}}}], "edges": [{"source": "77", "target": "221", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "222", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "223", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "224", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "225", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "226", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "227", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "228", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "229", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "230", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "231", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "232", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "233", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "234", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "235", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "236", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "237", "metadata": {"name": {"containment": "contains"}}}, {"source": "77", "target": "238", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "77", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "239", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "240", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "241", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "242", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "243", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "244", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "245", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "246", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "247", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "248", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "249", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "250", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "251", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "252", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "253", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "254", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "255", "metadata": {"name": {"containment": "contains"}}}, {"source": "78", "target": "256", "metadata": {"name": {"containment": "contains"}}}, {"source": "5", "target": "78", "metadata": {"name": {"containment": "contains"}}}, {"source": "1", "target": "5", "metadata": {"name": {"containment": "contains"}}}, {"source": "0", "target": "1", "metadata": {"name": {"containment": "contains"}}}]}} +INFO: ============================= +INFO: EXPRESSION="status=up" +INFO: ============================= +INFO: ============================= +INFO: EXPRESSION="sched-now=allocated" +INFO: ============================= diff --git a/t/t3028-resource-grow.t b/t/t3028-resource-grow.t index fc3e63da6..69687191d 100755 --- a/t/t3028-resource-grow.t +++ b/t/t3028-resource-grow.t @@ -13,7 +13,7 @@ cmds001="${cmd_dir}/cmds01.in" test001_desc="fully allocate node and grow job with new resources" test_expect_success "${test001_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds001} > cmds001 && - ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 001.R.out -r 2000 \ + ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 001.R.out \ < cmds001 && test_cmp 001.R.out ${exp_dir}/001.R.out ' @@ -22,60 +22,68 @@ cmds002="${cmd_dir}/cmds02.in" test002_desc="fully allocate node and grow job from randomized JGF" test_expect_success "${test002_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds002} > cmds002 && - ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 002.R.out -r 2000 \ + ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 002.R.out \ < cmds002 && test_cmp 002.R.out ${exp_dir}/002.R.out ' cmds003="${cmd_dir}/cmds03.in" -test003_desc="ensure attach with allocated vertices can't change allocations" +test003_desc="attach with allocated vertices doesn't affect planner" test_expect_success "${test003_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds003} > cmds003 && - ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 003.R.out -r 2000 \ - < cmds003 2> 003.R.err && - test_cmp 003.R.out ${exp_dir}/003.R.out && - test_cmp 003.R.err ${exp_dir}/003.R.err + ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 003.R.out \ + < cmds003 && + test_cmp 003.R.out ${exp_dir}/003.R.out ' cmds004="${cmd_dir}/cmds04.in" -test004_desc="can't grow with a different root in the subgraph" +test004_desc="attach with allocated, reserved vertices doesn't affect planner" test_expect_success "${test004_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds004} > cmds004 && - ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 004.R.out -r 2000 \ - < cmds004 2> 004.R.err && - test_cmp 004.R.out ${exp_dir}/004.R.out && - test_cmp 004.R.err ${exp_dir}/004.R.err + ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 004.R.out \ + < cmds004 && + test_cmp 004.R.out ${exp_dir}/004.R.out ' cmds005="${cmd_dir}/cmds05.in" -test005_desc="grow with subset of resource graph doesn't change resource graph" +test005_desc="can't grow with a different root in the subgraph" test_expect_success "${test005_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds005} > cmds005 && - ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 005.R.out -r 2000 \ - < cmds005 && - test_cmp 005.R.out ${exp_dir}/005.R.out + ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 005.R.out \ + < cmds005 2> 005.R.err && + test_cmp 005.R.out ${exp_dir}/005.R.out && + test_cmp 005.R.err ${exp_dir}/005.R.err ' cmds006="${cmd_dir}/cmds06.in" -test006_desc="error on invalid argument" +test006_desc="grow with subset of resource graph doesn't change resource graph" test_expect_success "${test006_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds006} > cmds006 && ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 006.R.out \ - < cmds006 2> 006.R.err && - test_cmp 006.R.out ${exp_dir}/006.R.out && - test_cmp 006.R.err ${exp_dir}/006.R.err + < cmds006 && + test_cmp 006.R.out ${exp_dir}/006.R.out ' cmds007="${cmd_dir}/cmds07.in" -err007="${exp_dir}/007.R.err" -test007_desc="error on nonexistent JGF" +test007_desc="error on invalid argument" test_expect_success "${test007_desc}" ' sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds007} > cmds007 && - sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${err007} > 007.R.err && ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 007.R.out \ - < cmds007 2> 007.R.new_err && + < cmds007 2> 007.R.err && test_cmp 007.R.out ${exp_dir}/007.R.out && - test_cmp 007.R.new_err 007.R.err + test_cmp 007.R.err ${exp_dir}/007.R.err +' + +cmds008="${cmd_dir}/cmds08.in" +err008="${exp_dir}/008.R.err" +test008_desc="error on nonexistent JGF" +test_expect_success "${test008_desc}" ' + sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${cmds008} > cmds008 && + sed "s~@TEST_SRCDIR@~${SHARNESS_TEST_SRCDIR}~g" ${err008} > 008.R.err && + ${query} -L ${jgf} -F jgf -f jgf -S CA -P low -t 008.R.out \ + < cmds008 2> 008.R.new_err && + test_cmp 008.R.out ${exp_dir}/008.R.out && + test_cmp 008.R.new_err 008.R.err ' test_done