From abec128aee5e8c287c82ff0d754c99490f95396f Mon Sep 17 00:00:00 2001 From: Paul Wells Date: Sat, 5 Sep 2026 04:45:15 -0700 Subject: [PATCH 1/2] add bus compression settings to PSRPCConfig psrpc v0.7.6 adds opt-in gzip at the bus boundary. Surface it as a psrpc.compression yaml block so every service that already carries a PSRPCConfig can enable it, and add BusOptions() as the single conversion into psrpc bus options. Compression stays off by default: a peer on an older psrpc cannot decode a compressed payload and its subscription read loop drops it silently, so a deployment has to be fully upgraded before quality is raised. The grpc patch bump comes from psrpc v0.7.6 via MVS. --- .changeset/psrpc-bus-compression.md | 6 ++++++ go.mod | 4 ++-- go.sum | 12 ++++------- rpc/typed_api.go | 31 +++++++++++++++++++++++++---- 4 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 .changeset/psrpc-bus-compression.md diff --git a/.changeset/psrpc-bus-compression.md b/.changeset/psrpc-bus-compression.md new file mode 100644 index 000000000..b12e67018 --- /dev/null +++ b/.changeset/psrpc-bus-compression.md @@ -0,0 +1,6 @@ +--- +"github.com/livekit/protocol": patch +"@livekit/protocol": patch +--- + +Add psrpc bus compression settings to PSRPCConfig diff --git a/go.mod b/go.mod index 9c7951457..6af753a8e 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/jxskiss/base62 v1.1.0 github.com/lithammer/shortuuid/v4 v4.2.0 github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731 - github.com/livekit/psrpc v0.7.5 + github.com/livekit/psrpc v0.7.6 github.com/mackerelio/go-osstat v0.2.8 github.com/maxbrunsfeld/counterfeiter/v6 v6.12.2 github.com/nyaruka/phonenumbers v1.8.1 @@ -45,7 +45,7 @@ require ( golang.org/x/sys v0.47.0 golang.org/x/text v0.40.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa - google.golang.org/grpc v1.83.0 + google.golang.org/grpc v1.83.1 google.golang.org/protobuf v1.36.12 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 9541e2c47..58d9d3d2a 100644 --- a/go.sum +++ b/go.sum @@ -85,12 +85,8 @@ github.com/lithammer/shortuuid/v4 v4.2.0 h1:LMFOzVB3996a7b8aBuEXxqOBflbfPQAiVzkI github.com/lithammer/shortuuid/v4 v4.2.0/go.mod h1:D5noHZ2oFw/YaKCfGy0YxyE7M0wMbezmMjPdhyEFe6Y= github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731 h1:9x+U2HGLrSw5ATTo469PQPkqzdoU7be46ryiCDO3boc= github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731/go.mod h1:Rs3MhFwutWhGwmY1VQsygw28z5bWcnEYmS1OG9OxjOQ= -github.com/livekit/psrpc v0.7.3 h1:bekuZt/ZQzg8+/M8G6G5jq7bvV9fAKdPHSOZeTwrIIc= -github.com/livekit/psrpc v0.7.3/go.mod h1:rAI+m2+/cb4x9RXhLRtUx5ZwdfjjXOl4zi46IjEetaw= -github.com/livekit/psrpc v0.7.5-0.20260819230101-cbf56a2f6872 h1:T4+LTChYiNKWkK2yeW0FXB2CNpEXxiHEV75Xhh8lDUI= -github.com/livekit/psrpc v0.7.5-0.20260819230101-cbf56a2f6872/go.mod h1:rAI+m2+/cb4x9RXhLRtUx5ZwdfjjXOl4zi46IjEetaw= -github.com/livekit/psrpc v0.7.5 h1:WxfJIQ41X1b+48A1uzc8Gy9FhYEMxBJNCpCYqPdO/Ds= -github.com/livekit/psrpc v0.7.5/go.mod h1:rAI+m2+/cb4x9RXhLRtUx5ZwdfjjXOl4zi46IjEetaw= +github.com/livekit/psrpc v0.7.6 h1:YG07lUMTtf+eaYI2goT9zcVZ0kGJNWN1K6ETNFtv1HQ= +github.com/livekit/psrpc v0.7.6/go.mod h1:DMw15RO7x5XmcgfwzWJYk2In605kx+wu1QRVbPfzf8M= github.com/mackerelio/go-osstat v0.2.8 h1:I2duicTaCGWoM53XwAwA9OIe1inu0xnVs8/pqOWWVr4= github.com/mackerelio/go-osstat v0.2.8/go.mod h1:SyS3XxKdoSKJnTGTkN5Yrh6VUQVuAURACfE6y+2DN4k= github.com/magefile/mage v1.17.2 h1:fyXVu1eadI8Ap1HCCNgEhJ5McIWiYhLR8uol64ZZc40= @@ -251,8 +247,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY= google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk= google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.83.0 h1:JeNZEKJFbQxArAMl+hiytHauacDNqJUllNfmIMmpqnQ= -google.golang.org/grpc v1.83.0/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= +google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.2 h1:rgSNvqscFZ1JgV/4wH5GOsZFSFkR2Eua9As3KIr2LlM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.2/go.mod h1:iMEtFwDlAhjDU9L5mY6U1XLwlIId/G3h+QcBHDIvrJ8= google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc= diff --git a/rpc/typed_api.go b/rpc/typed_api.go index 8a17819fa..7368547d2 100644 --- a/rpc/typed_api.go +++ b/rpc/typed_api.go @@ -31,10 +31,22 @@ import ( ) type PSRPCConfig struct { - MaxAttempts int `yaml:"max_attempts,omitempty"` - Timeout time.Duration `yaml:"timeout,omitempty"` - Backoff time.Duration `yaml:"backoff,omitempty"` - BufferSize int `yaml:"buffer_size,omitempty"` + MaxAttempts int `yaml:"max_attempts,omitempty"` + Timeout time.Duration `yaml:"timeout,omitempty"` + Backoff time.Duration `yaml:"backoff,omitempty"` + BufferSize int `yaml:"buffer_size,omitempty"` + Compression CompressionConfig `yaml:"compression,omitempty"` +} + +// Quality zero disables compression. Only MaxDecompressedSize affects reading. +type CompressionConfig struct { + Quality int `yaml:"quality,omitempty"` + Threshold int `yaml:"threshold,omitempty"` + MaxDecompressedSize int `yaml:"max_decompressed_size,omitempty"` +} + +var DefaultCompressionConfig = CompressionConfig{ + Threshold: psrpc.DefaultCompressionThreshold, } var DefaultPSRPCConfig = PSRPCConfig{ @@ -42,6 +54,17 @@ var DefaultPSRPCConfig = PSRPCConfig{ Timeout: 3 * time.Second, Backoff: 2 * time.Second, BufferSize: 1000, + Compression: DefaultCompressionConfig, +} + +func (c PSRPCConfig) BusOptions() []psrpc.BusOption { + return []psrpc.BusOption{ + psrpc.WithBusCompression(psrpc.CompressionOpts{ + Quality: c.Compression.Quality, + Threshold: c.Compression.Threshold, + MaxDecompressedSize: c.Compression.MaxDecompressedSize, + }), + } } type ClientParams struct { From 58b6510a661b62a87b9de2e818953b7b03d9bbca Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 5 Sep 2026 12:01:13 +0000 Subject: [PATCH 2/2] generated protobuf --- rpc/agent.psrpc.go | 2 +- rpc/agent_dispatch.psrpc.go | 2 +- rpc/egress.psrpc.go | 2 +- rpc/ingress.psrpc.go | 2 +- rpc/io.psrpc.go | 2 +- rpc/keepalive.psrpc.go | 2 +- rpc/participant.psrpc.go | 2 +- rpc/room.psrpc.go | 2 +- rpc/roommanager.psrpc.go | 2 +- rpc/signal.psrpc.go | 2 +- rpc/sip.psrpc.go | 2 +- rpc/whip_signal.psrpc.go | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rpc/agent.psrpc.go b/rpc/agent.psrpc.go index 40f7489e5..af364ac60 100644 --- a/rpc/agent.psrpc.go +++ b/rpc/agent.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/agent.proto package rpc diff --git a/rpc/agent_dispatch.psrpc.go b/rpc/agent_dispatch.psrpc.go index 2715d016a..e9bfd9325 100644 --- a/rpc/agent_dispatch.psrpc.go +++ b/rpc/agent_dispatch.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/agent_dispatch.proto package rpc diff --git a/rpc/egress.psrpc.go b/rpc/egress.psrpc.go index c05372865..f13a389d4 100644 --- a/rpc/egress.psrpc.go +++ b/rpc/egress.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/egress.proto package rpc diff --git a/rpc/ingress.psrpc.go b/rpc/ingress.psrpc.go index 3c433b129..d19716157 100644 --- a/rpc/ingress.psrpc.go +++ b/rpc/ingress.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/ingress.proto package rpc diff --git a/rpc/io.psrpc.go b/rpc/io.psrpc.go index 039147404..446d5868a 100644 --- a/rpc/io.psrpc.go +++ b/rpc/io.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/io.proto package rpc diff --git a/rpc/keepalive.psrpc.go b/rpc/keepalive.psrpc.go index 107bb8fa8..48f633d69 100644 --- a/rpc/keepalive.psrpc.go +++ b/rpc/keepalive.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/keepalive.proto package rpc diff --git a/rpc/participant.psrpc.go b/rpc/participant.psrpc.go index b8d1293d2..6748f0ff1 100644 --- a/rpc/participant.psrpc.go +++ b/rpc/participant.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/participant.proto package rpc diff --git a/rpc/room.psrpc.go b/rpc/room.psrpc.go index 83818a5e4..7a8318de1 100644 --- a/rpc/room.psrpc.go +++ b/rpc/room.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/room.proto package rpc diff --git a/rpc/roommanager.psrpc.go b/rpc/roommanager.psrpc.go index 5df0da239..d812b9bad 100644 --- a/rpc/roommanager.psrpc.go +++ b/rpc/roommanager.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/roommanager.proto package rpc diff --git a/rpc/signal.psrpc.go b/rpc/signal.psrpc.go index 5ac766af3..db3fac83e 100644 --- a/rpc/signal.psrpc.go +++ b/rpc/signal.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/signal.proto package rpc diff --git a/rpc/sip.psrpc.go b/rpc/sip.psrpc.go index 671defea5..ae49c7a91 100644 --- a/rpc/sip.psrpc.go +++ b/rpc/sip.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/sip.proto package rpc diff --git a/rpc/whip_signal.psrpc.go b/rpc/whip_signal.psrpc.go index 0f4f4ddf7..bbeff5e97 100644 --- a/rpc/whip_signal.psrpc.go +++ b/rpc/whip_signal.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.7.3, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.7.6, DO NOT EDIT. // source: rpc/whip_signal.proto package rpc