summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2024-07-04 19:58:30 +0200
committerRory& <root@rory.gay>2024-07-04 19:58:30 +0200
commit045d0b6d055bb76ffba11576bc7582e91b4e51aa (patch)
treef426d2f8e5757cbe4c1e6f1d34362bbeaa3a087a
parentMore workers? (diff)
downloadRory-Open-Architecture-045d0b6d055bb76ffba11576bc7582e91b4e51aa.tar.xz
Client readers
-rwxr-xr-xhost/Rory-nginx/services/matrix/synapse/synapse-main.nix1
-rw-r--r--host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix121
-rw-r--r--host/Rory-nginx/services/matrix/synapse/workers/module.nix5
3 files changed, 127 insertions, 0 deletions
diff --git a/host/Rory-nginx/services/matrix/synapse/synapse-main.nix b/host/Rory-nginx/services/matrix/synapse/synapse-main.nix
index 66292a3..cdbb6b7 100755
--- a/host/Rory-nginx/services/matrix/synapse/synapse-main.nix
+++ b/host/Rory-nginx/services/matrix/synapse/synapse-main.nix
@@ -18,6 +18,7 @@
     federationSenders = 32;
     pushers = 2;
     mediaRepoWorkers = 8;
+    clientReaders = 16;
 
     enableAppserviceWorker = true;
     enableBackgroundWorker = true;
diff --git a/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix b/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix
new file mode 100644
index 0000000..c6a4c44
--- /dev/null
+++ b/host/Rory-nginx/services/matrix/synapse/workers/client-reader.nix
@@ -0,0 +1,121 @@
+{
+  config,
+  pkgs,
+  lib,
+  ...
+}:
+
+let
+  cfg = config.services.matrix-synapse;
+  workers = lib.range 0 (cfg.clientReaders - 1);
+  routes = [
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/publicRooms$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/joined_members$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/context/.*$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/members$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state$"
+    "~ ^/_matrix/client/v1/rooms/.*/hierarchy$"
+    "~ ^/_matrix/client/(v1|unstable)/rooms/.*/relations/"
+    "~ ^/_matrix/client/v1/rooms/.*/threads$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/login$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/account/3pid$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/account/whoami$"
+    "~ ^/_matrix/client/versions$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/voip/turnServer$"
+    "~ ^/_matrix/client/(r0|v3|unstable)/register$"
+    "~ ^/_matrix/client/(r0|v3|unstable)/register/available$"
+    "~ ^/_matrix/client/(r0|v3|unstable)/auth/.*/fallback/web$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/messages$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/event"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/joined_rooms"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable/.*)/rooms/.*/aliases"
+    "~ ^/_matrix/client/v1/rooms/.*/timestamp_to_event$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/search"
+    "~ ^/_matrix/client/(r0|v3|unstable)/user/.*/filter(/|$)"
+    "~ ^/_matrix/client/(r0|v3|unstable)/password_policy$"
+    "~ ^/_matrix/client/(api/v1|r0|v3|unstable)/directory/room/.*$"
+    "~ ^/_matrix/client/(r0|v3|unstable)/capabilities$"
+    "~ ^/_matrix/client/(r0|v3|unstable)/notifications$"
+  ];
+in
+{
+  config = lib.mkIf (cfg.clientReaders > 0) {
+    services.matrix-synapse = {
+      settings = {
+        instance_map = lib.listToAttrs (
+          lib.map (index: {
+            name = "client_reader-${toString index}";
+            value = {
+              path = "/run/matrix-synapse/client_reader-${toString index}.sock";
+            };
+          }) workers
+        );
+
+        media_instance_running_background_jobs = "client_reader-0";
+        enable_client_reader = false;
+      };
+
+      workers = lib.listToAttrs (
+        lib.map (index: {
+          name = "client_reader-${toString index}";
+          value = {
+            worker_app = "synapse.app.generic_worker";
+            worker_listeners = [
+              {
+                type = "http";
+                path = "/run/matrix-synapse/client_reader-${toString index}.sock";
+                resources = [
+                  {
+                    names = [ "replication" ];
+                    compress = false;
+                  }
+                ];
+              }
+              {
+                type = "http";
+                path = "/run/matrix-synapse/client_reader-client-${toString index}.sock";
+                mode = "666";
+                resources = [
+                  {
+                    names = [ "client" ];
+                    compress = false;
+                  }
+                ];
+              }
+            ];
+            database = (
+              import ../db.nix {
+                workerName = "client_reader-${toString index}";
+                dbGroup = "small";
+              }
+            );
+            enable_client_reader = true;
+          };
+        }) workers
+      );
+    };
+
+    services.nginx.upstreams."client_reader" = {
+      extraConfig = ''
+        keepalive 32;
+      '';
+      servers = lib.listToAttrs (
+        lib.map (index: {
+          name = "unix:/run/matrix-synapse/client_reader-client-${toString index}.sock";
+          value = {
+            max_fails = 0;
+          };
+        }) workers
+      );
+    };
+
+    services.nginx.virtualHosts."${cfg.nginxVirtualHostName}".locations = lib.listToAttrs (
+      lib.map (route: {
+        name = route;
+        value = {
+          proxyPass = "http://client_reader";
+        };
+      }) routes
+    );
+  };
+}
diff --git a/host/Rory-nginx/services/matrix/synapse/workers/module.nix b/host/Rory-nginx/services/matrix/synapse/workers/module.nix
index 080f524..2ab1d10 100644
--- a/host/Rory-nginx/services/matrix/synapse/workers/module.nix
+++ b/host/Rory-nginx/services/matrix/synapse/workers/module.nix
@@ -73,6 +73,11 @@ in
         default = 0;
         description = "Number of sync workers";
       };
+      clientReaders = lib.mkOption {
+        type = lib.types.int;
+        default = 0;
+        description = "Number of client readers";
+      };
 
       nginxVirtualHostName = lib.mkOption {
         type = lib.types.str;