feat: add sched GC predicate statics; wire sel_optimize_set(1) in sched_init (6-4, 6-9)

This commit is contained in:
Rongsong Shen 2026-04-30 04:13:14 +00:00
parent 72546d3a22
commit acda9bb228
3 changed files with 39 additions and 1 deletions

View file

@ -14,11 +14,30 @@
#include "plugin.h"
#include "preason.h"
#include "resobj.h"
#include "resreq.h"
#include "scheduler.h"
#include "utils.h"
#include "xcealloc.h"
#include "xstring.h"
static int sched_session_active(xce_scheduler_t* sched)
{
return atomic_load_explicit(&sched->session_active,
memory_order_acquire);
}
static int sched_eval_in_progress(xce_scheduler_t* sched)
{
return atomic_load_explicit(&sched->eval_in_progress,
memory_order_acquire);
}
static int sched_staging_merge_complete(xce_scheduler_t* sched)
{
return atomic_load_explicit(&sched->staging_merge_complete,
memory_order_acquire);
}
static void* sched_job_picker(void* arg)
{
xce_sched_plugin_t* job_picker = NULL;
@ -356,6 +375,8 @@ int sched_init(xce_scheduler_t* sched, xce_client_config_t* config,
memset(sched, 0x0, sizeof(*sched));
sel_optimize_set(1); /* enable CSE intern table for scheduler process */
sched->nextid = 1;
sched->configver = 0;

View file

@ -2,7 +2,7 @@ scheduler_test_src = [
'test.c'
]
scheduler_test_deps = [libxce_deps, librtti_dep, unity_dep]
scheduler_test_deps = [libxce_deps, librtti_dep, unity_dep, libxce_dep]
incdir = include_directories('../include', '../../include', '.')

View file

@ -5,6 +5,8 @@
#include <stdatomic.h>
#include <unity/unity.h>
#include "resreq.h"
/* Minimal struct declaration to verify atomic fields exist.
* We avoid including scheduler.h to prevent dependency on capnp headers. */
typedef struct {
@ -87,6 +89,20 @@ test_scheduler_t_has_atomic_gc_fields(void)
TEST_ASSERT_EQUAL_INT(0, atomic_load(&sched.staging_merge_complete));
}
static void
test_sel_optimize_set_at_scheduler_startup(void)
{
/* sel_optimize_set(1) is called in sched_init.
* Since we can't call sched_init (it starts threads/network),
* verify the setter/getter contract directly. */
sel_optimize_set(1);
TEST_ASSERT_EQUAL_INT(1, sel_get_optimize_level());
/* reset for clean test isolation */
#ifdef UNIT_TEST
sel_optimize_test_reset();
#endif
}
#define TEST(x) \
do { \
if (check_test(&arguments, #x)) { \
@ -101,6 +117,7 @@ int main(int argc, char* argv[])
UNITY_BEGIN();
TEST(test_scheduler_t_has_atomic_gc_fields);
TEST(test_sel_optimize_set_at_scheduler_startup);
return UNITY_END();
}