Client readers
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;
|