From 93327f22ad2ba05fe62ca33f8aea23553190b9c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ma=C3=ABl=20Madon?= <mael.madon@irit.fr>
Date: Mon, 22 Jan 2024 10:29:26 +0100
Subject: [PATCH] test with old versions pybatsim

---
 sched/fillerSched.py | 63 ++++++++++++++++++++++++++++++++++++++++++++
 test.nix             | 34 ++++++++++++++++++++++++
 2 files changed, 97 insertions(+)
 create mode 100644 sched/fillerSched.py
 create mode 100644 test.nix

diff --git a/sched/fillerSched.py b/sched/fillerSched.py
new file mode 100644
index 0000000..7b83c48
--- /dev/null
+++ b/sched/fillerSched.py
@@ -0,0 +1,63 @@
+from batsim.batsim import BatsimScheduler, Batsim
+
+import sys
+import os
+from procset import ProcSet
+from itertools import islice
+
+
+class FillerSched(BatsimScheduler):
+
+    def onAfterBatsimInit(self):
+        self.nb_completed_jobs = 0
+
+        self.jobs_completed = []
+        self.jobs_waiting = []
+
+        self.sched_delay = 0.005
+
+        self.openJobs = set()
+        self.availableResources = ProcSet((0,self.bs.nb_compute_resources-1))
+
+
+    def scheduleJobs(self):
+        scheduledJobs = []
+
+        print('openJobs = ', self.openJobs)
+        print('available = ', self.availableResources)
+
+        # Iterating over a copy to be able to remove jobs from openJobs at traversal
+        for job in set(self.openJobs):
+            nb_res_req = job.requested_resources
+
+            if nb_res_req <= len(self.availableResources):
+                # Retrieve the *nb_res_req* first availables resources
+                job_alloc = ProcSet(*islice(self.availableResources, nb_res_req))
+                job.allocation = job_alloc
+                scheduledJobs.append(job)
+
+                self.availableResources -= job_alloc
+
+                self.openJobs.remove(job)
+
+        # update time
+        self.bs.consume_time(self.sched_delay)
+
+        # send to uds
+        if len(scheduledJobs) > 0:
+            self.bs.execute_jobs(scheduledJobs)
+
+        print('openJobs = ', self.openJobs)
+        print('available = ', self.availableResources)
+        print('')
+
+    def onJobSubmission(self, job):
+        if job.requested_resources > self.bs.nb_compute_resources:
+            self.bs.reject_jobs([job]) # This job requests more resources than the machine has
+        else:
+            self.openJobs.add(job)
+            self.scheduleJobs()
+
+    def onJobCompletion(self, job):
+        self.availableResources |= job.allocation
+        self.scheduleJobs()
diff --git a/test.nix b/test.nix
new file mode 100644
index 0000000..70e1c83
--- /dev/null
+++ b/test.nix
@@ -0,0 +1,34 @@
+{ 
+ kapack ? import
+    (fetchTarball "https://github.com/oar-team/nur-kapack/archive/901a5b656f695f2c82d17c091a55db2318ed3f39.tar.gz")
+    {}
+,  pkgs ? kapack.pkgs
+, python3 ? pkgs.python3
+, python3Packages ? pkgs.python3Packages
+}:
+
+let
+  jobs = rec {
+    evalys = kapack.evalys.overrideAttrs (attr: rec {
+      name = "evalys";
+      version = "d4d47bd2f4d076730b05f1345b1bf9032cd28753";
+      src = pkgs.fetchgit rec {
+        url = "https://github.com/Mema5/evalys.git";
+        rev = version;
+        sha256 = "sha256-eHGRNj2xWBoEgG2wvAZUoH1Us5d1yu9emu1Zyyms1JU=";
+      };
+    });
+
+    expe = pkgs.mkShell rec {
+      buildInputs = [
+        kapack.batsim-410
+        kapack.pybatsim-320
+        python3Packages.matplotlib
+        evalys
+      ];
+      QT_QPA_PLATFORM_PLUGIN_PATH=  with pkgs.libsForQt5.qt5; "${qtbase.bin}/lib/qt-${qtbase.version}/plugins/platforms";      
+    };
+  };
+
+in
+  jobs
\ No newline at end of file
-- 
GitLab