about summary refs log tree commit diff
path: root/third_party/nix/src/libstore/store-api.cc
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2020-08-01T19·44-0400
committerglittershark <grfn@gws.fyi>2020-08-02T02·03+0000
commit2646e57aae5aedc3d07d8596aa6a61048b312e54 (patch)
tree17be4bec752472e42b20fa52b5840d99cc44aae7 /third_party/nix/src/libstore/store-api.cc
parent1094e356df316e28d8b7ee8ef9844d0ec7853872 (diff)
fix(3p/nix): Prepend unix:// to daemon socket r/1538
Prepend the unix:// URI scheme to the daemon socket so that grpc knows
we want to connect to a unix socket rather than another type of URI. As
part of debugging this I made the failure message for the RPCStore
include the URI, which I'm leaving in since it'll be nice to have.

Change-Id: I6e70596895117b9a0d53fe2a61d8542ceb64c940
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1543
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Tested-by: BuildkiteCI
Diffstat (limited to 'third_party/nix/src/libstore/store-api.cc')
-rw-r--r--third_party/nix/src/libstore/store-api.cc44
1 files changed, 23 insertions, 21 deletions
diff --git a/third_party/nix/src/libstore/store-api.cc b/third_party/nix/src/libstore/store-api.cc
index 96c6f9341013..2598c4ce2ebd 100644
--- a/third_party/nix/src/libstore/store-api.cc
+++ b/third_party/nix/src/libstore/store-api.cc
@@ -5,6 +5,7 @@
 
 #include <absl/strings/match.h>
 #include <absl/strings/numbers.h>
+#include <absl/strings/str_cat.h>
 #include <absl/strings/str_split.h>
 #include <glog/logging.h>
 #include <grpcpp/create_channel.h>
@@ -984,28 +985,29 @@ StoreType getStoreType(const std::string& uri, const std::string& stateDir) {
   }
 }
 
-static RegisterStoreImplementation regStore(
-    [](const std::string& uri,
-       const Store::Params& params) -> std::shared_ptr<Store> {
-      switch (getStoreType(uri, get(params, "state", settings.nixStateDir))) {
-        case tDaemon: {
-          auto daemon_socket_uri = settings.nixDaemonSocketFile;
-          auto channel = grpc::CreateChannel(
-              daemon_socket_uri, grpc::InsecureChannelCredentials());
-          return std::shared_ptr<Store>(std::make_shared<nix::store::RpcStore>(
-              params, proto::WorkerService::NewStub(channel)));
-        }
-        case tLocal: {
-          Store::Params params2 = params;
-          if (absl::StartsWith(uri, "/")) {
-            params2["root"] = uri;
-          }
-          return std::shared_ptr<Store>(std::make_shared<LocalStore>(params2));
-        }
-        default:
-          return nullptr;
+static RegisterStoreImplementation regStore([](const std::string& uri,
+                                               const Store::Params& params)
+                                                -> std::shared_ptr<Store> {
+  switch (getStoreType(uri, get(params, "state", settings.nixStateDir))) {
+    case tDaemon: {
+      auto daemon_socket_uri =
+          absl::StrCat("unix://", settings.nixDaemonSocketFile);
+      auto channel = grpc::CreateChannel(daemon_socket_uri,
+                                         grpc::InsecureChannelCredentials());
+      return std::shared_ptr<Store>(std::make_shared<nix::store::RpcStore>(
+          daemon_socket_uri, params, proto::WorkerService::NewStub(channel)));
+    }
+    case tLocal: {
+      Store::Params params2 = params;
+      if (absl::StartsWith(uri, "/")) {
+        params2["root"] = uri;
       }
-    });
+      return std::shared_ptr<Store>(std::make_shared<LocalStore>(params2));
+    }
+    default:
+      return nullptr;
+  }
+});
 
 std::list<ref<Store>> getDefaultSubstituters() {
   static auto stores([]() {