aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/build/goal.hh
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-03-08 16:24:49 -0500
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-08-25 10:01:25 -0400
commit5e3986f59cb58f48186a49dcec7aa317b4787522 (patch)
tree7c746838e7da6aa3677e06cc90766d014c06cfd5 /src/libstore/build/goal.hh
parent692074f7142fcf8ede1266b6d8cbbd5feaf3221f (diff)
Adapt scheduler to work with dynamic derivations
To avoid dealing with an optional `drvPath` (because we might not know it yet) everywhere, make an `CreateDerivationAndRealiseGoal`. This goal just builds/substitutes the derivation file, and then kicks of a build for that obtained derivation; in other words it does the chaining of goals when the drv file is missing (as can already be the case) or computed (new case). This also means the `getDerivation` state can be removed from `DerivationGoal`, which makes the `BasicDerivation` / in memory case and `Derivation` / drv file file case closer together. The map type is factored out for clarity, and because we will soon hvae a second use for it (`Derivation` itself). Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
Diffstat (limited to 'src/libstore/build/goal.hh')
-rw-r--r--src/libstore/build/goal.hh22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/libstore/build/goal.hh b/src/libstore/build/goal.hh
index d3127caea..01d3c3491 100644
--- a/src/libstore/build/goal.hh
+++ b/src/libstore/build/goal.hh
@@ -41,8 +41,24 @@ typedef std::map<StorePath, WeakGoalPtr> WeakGoalMap;
* of each category in parallel.
*/
enum struct JobCategory {
+ /**
+ * A build of a derivation; it will use CPU and disk resources.
+ */
Build,
+ /**
+ * A substitution an arbitrary store object; it will use network resources.
+ */
Substitution,
+ /**
+ * A goal that does no "real" work by itself, and just exists to depend on
+ * other goals which *do* do real work. These goals therefore are not
+ * limited.
+ *
+ * These goals cannot infinitely create themselves, so there is no risk of
+ * a "fork bomb" type situation (which would be a problem even though the
+ * goal do no real work) either.
+ */
+ Administration,
};
struct Goal : public std::enable_shared_from_this<Goal>
@@ -110,7 +126,7 @@ public:
* sake of both privacy and determinism, and this "safe accessor"
* ensures we don't.
*/
- BuildResult getBuildResult(const DerivedPath &);
+ BuildResult getBuildResult(const DerivedPath &) const;
/**
* Exception containing an error message, if any.
@@ -144,7 +160,7 @@ public:
void trace(std::string_view s);
- std::string getName()
+ std::string getName() const
{
return name;
}
@@ -166,7 +182,7 @@ public:
* @brief Hint for the scheduler, which concurrency limit applies.
* @see JobCategory
*/
- virtual JobCategory jobCategory() = 0;
+ virtual JobCategory jobCategory() const = 0;
};
void addToWeakGoals(WeakGoals & goals, GoalPtr p);