[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#45018] [PATCH v2 3/6] daemon: Factorize substituter agent spawning.
From: |
Ludovic Courtès |
Subject: |
[bug#45018] [PATCH v2 3/6] daemon: Factorize substituter agent spawning. |
Date: |
Sun, 6 Dec 2020 23:04:12 +0100 |
* nix/libstore/local-store.hh (class LocalStore)[substituter]: New
method.
[runningSubstituter]: Turn into a shared_ptr.
* nix/libstore/local-store.cc (LocalStore::querySubstitutablePaths):
Call 'substituter' instead of using inline code.
(LocalStore::querySubstitutablePathInfos): Likewise.
(LocalStore::substituter): New method.
---
nix/libstore/local-store.cc | 29 +++++++++++++----------------
nix/libstore/local-store.hh | 5 ++++-
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc
index 4219573a56..c304e2ddd1 100644
--- a/nix/libstore/local-store.cc
+++ b/nix/libstore/local-store.cc
@@ -850,14 +850,7 @@ PathSet LocalStore::querySubstitutablePaths(const PathSet
& paths)
if (!settings.useSubstitutes || paths.empty()) return res;
- if (!runningSubstituter) {
- const Strings args = { "substitute", "--query" };
- const std::map<string, string> env = { { "_NIX_OPTIONS",
settings.pack() } };
- std::unique_ptr<Agent> fresh(new Agent(settings.guixProgram, args,
env));
- runningSubstituter.swap(fresh);
- }
-
- Agent & run = *runningSubstituter;
+ Agent & run = *substituter();
string s = "have ";
foreach (PathSet::const_iterator, j, paths)
@@ -877,18 +870,22 @@ PathSet LocalStore::querySubstitutablePaths(const PathSet
& paths)
}
+std::shared_ptr<Agent> LocalStore::substituter()
+{
+ if (!runningSubstituter) {
+ const Strings args = { "substitute", "--query" };
+ const std::map<string, string> env = { { "_NIX_OPTIONS",
settings.pack() } };
+ runningSubstituter = std::make_shared<Agent>(settings.guixProgram,
args, env);
+ }
+
+ return runningSubstituter;
+}
+
void LocalStore::querySubstitutablePathInfos(PathSet & paths,
SubstitutablePathInfos & infos)
{
if (!settings.useSubstitutes) return;
- if (!runningSubstituter) {
- const Strings args = { "substitute", "--query" };
- const std::map<string, string> env = { { "_NIX_OPTIONS",
settings.pack() } };
- std::unique_ptr<Agent> fresh(new Agent(settings.guixProgram, args,
env));
- runningSubstituter.swap(fresh);
- }
-
- Agent & run = *runningSubstituter;
+ Agent & run = *substituter();
string s = "info ";
foreach (PathSet::const_iterator, i, paths)
diff --git a/nix/libstore/local-store.hh b/nix/libstore/local-store.hh
index 57d15bac7e..9ba37219da 100644
--- a/nix/libstore/local-store.hh
+++ b/nix/libstore/local-store.hh
@@ -42,7 +42,10 @@ class LocalStore : public StoreAPI
{
private:
/* The currently running substituter or empty. */
- std::unique_ptr<Agent> runningSubstituter;
+ std::shared_ptr<Agent> runningSubstituter;
+
+ /* Ensure the substituter is running and return it. */
+ std::shared_ptr<Agent> substituter();
Path linksDir;
--
2.29.2
- [bug#45018] [PATCH 4/6] daemon: Run 'guix substitute --substitute' as an agent., (continued)
[bug#45018] [PATCH 0/6] Process and connection reuse for substitutions, 宋文武, 2020/12/03
[bug#45018] [PATCH 0/6] Process and connection reuse for substitutions, Ludovic Courtès, 2020/12/03
- [bug#45018] [PATCH 0/6] Process and connection reuse for substitutions, Mathieu Othacehe, 2020/12/04
- [bug#45018] [PATCH v2 0/6] Process and connection reuse for substitutions, Ludovic Courtès, 2020/12/06
- [bug#45018] [PATCH v2 2/6] daemon: Use 'Agent' to spawn 'guix substitute --query'., Ludovic Courtès, 2020/12/06
- [bug#45018] [PATCH v2 6/6] daemon: Raise an error if substituter doesn't send the expected hash., Ludovic Courtès, 2020/12/06
- [bug#45018] [PATCH v2 1/6] daemon: 'Agent' constructor takes a list of environment variables., Ludovic Courtès, 2020/12/06
- [bug#45018] [PATCH v2 3/6] daemon: Factorize substituter agent spawning.,
Ludovic Courtès <=
- [bug#45018] [PATCH v2 5/6] substitute: Cache and reuse connections while substituting., Ludovic Courtès, 2020/12/06
- [bug#45018] [PATCH v2 4/6] daemon: Run 'guix substitute --substitute' as an agent., Ludovic Courtès, 2020/12/06
- bug#45018: [PATCH v2 0/6] Process and connection reuse for substitutions, Ludovic Courtès, 2020/12/08