diff options
author | regnat <rg@regnat.ovh> | 2021-06-11 08:37:59 +0200 |
---|---|---|
committer | regnat <rg@regnat.ovh> | 2021-06-11 09:12:53 +0200 |
commit | 7c077d2a0f4ccdeb84a4ad14ba5871a3fbe170e4 (patch) | |
tree | bfc613d5e8c4675f37486949c766a3d7ea66a8da /src | |
parent | 8e6ee1b9e924fbbbeb5594eb89e7a570f36ab6e1 (diff) |
Add a ca-derivations required machine feature
Make ca-derivations require a `ca-derivations` machine feature, and
ca-aware builders expose it.
That way, a network of builders can mix ca-aware and non-ca-aware
machines, and the scheduler will send them in the right place.
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/parsed-derivations.cc | 2 | ||||
-rw-r--r-- | src/libstore/store-api.cc | 7 | ||||
-rw-r--r-- | src/libstore/store-api.hh | 4 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/libstore/parsed-derivations.cc b/src/libstore/parsed-derivations.cc index c5c3ae3dc..5e383a9a4 100644 --- a/src/libstore/parsed-derivations.cc +++ b/src/libstore/parsed-derivations.cc @@ -91,6 +91,8 @@ StringSet ParsedDerivation::getRequiredSystemFeatures() const StringSet res; for (auto & i : getStringsAttr("requiredSystemFeatures").value_or(Strings())) res.insert(i); + if (!derivationHasKnownOutputPaths(drv.type())) + res.insert("ca-derivations"); return res; } diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index 93fcb068f..6ca8e5b24 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -337,6 +337,13 @@ ValidPathInfo Store::addToStoreSlow(std::string_view name, const Path & srcPath, return info; } +StringSet StoreConfig::getDefaultSystemFeatures() +{ + auto res = settings.systemFeatures.get(); + if (settings.isExperimentalFeatureEnabled("ca-derivations")) + res.insert("ca-derivations"); + return res; +} Store::Store(const Params & params) : StoreConfig(params) diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh index f66298991..9b4b10727 100644 --- a/src/libstore/store-api.hh +++ b/src/libstore/store-api.hh @@ -180,6 +180,8 @@ struct StoreConfig : public Config StoreConfig() = delete; + StringSet getDefaultSystemFeatures(); + virtual ~StoreConfig() { } virtual const std::string name() = 0; @@ -196,7 +198,7 @@ struct StoreConfig : public Config Setting<bool> wantMassQuery{this, false, "want-mass-query", "whether this substituter can be queried efficiently for path validity"}; - Setting<StringSet> systemFeatures{this, settings.systemFeatures, + Setting<StringSet> systemFeatures{this, getDefaultSystemFeatures(), "system-features", "Optional features that the system this store builds on implements (like \"kvm\")."}; |