Skip to content

Commit f3411ea

Browse files
committed
policyserver: add unbounded cache for events redacted by policy server
Hopefully it won't take too much memory
1 parent f92947f commit f3411ea

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

policyeval/policyserver.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88

99
"github.com/rs/zerolog"
10+
"go.mau.fi/util/exsync"
1011
"maunium.net/go/mautrix/event"
1112
"maunium.net/go/mautrix/federation"
1213
"maunium.net/go/mautrix/id"
@@ -22,10 +23,11 @@ type psCacheEntry struct {
2223
}
2324

2425
type PolicyServer struct {
25-
Federation *federation.Client
26-
ServerAuth *federation.ServerAuth
27-
eventCache map[id.EventID]*psCacheEntry
28-
cacheLock sync.Mutex
26+
Federation *federation.Client
27+
ServerAuth *federation.ServerAuth
28+
eventCache map[id.EventID]*psCacheEntry
29+
redactionCache *exsync.Set[id.EventID]
30+
cacheLock sync.Mutex
2931

3032
CacheMaxSize int
3133
CacheMaxAge time.Duration
@@ -36,8 +38,9 @@ func NewPolicyServer(serverName string) *PolicyServer {
3638
inMemCache := federation.NewInMemoryCache()
3739
fed := federation.NewClient(serverName, nil, inMemCache)
3840
return &PolicyServer{
39-
eventCache: make(map[id.EventID]*psCacheEntry),
40-
Federation: fed,
41+
eventCache: make(map[id.EventID]*psCacheEntry),
42+
redactionCache: exsync.NewSet[id.EventID](),
43+
Federation: fed,
4144
ServerAuth: federation.NewServerAuth(fed, inMemCache, func(auth federation.XMatrixAuth) string {
4245
return auth.Destination
4346
}),
@@ -144,7 +147,8 @@ func (ps *PolicyServer) HandleCheck(
144147
r.Lock.Lock()
145148
defer func() {
146149
r.Lock.Unlock()
147-
if caller != pdu.Sender.Homeserver() && finalRec == PSRecommendationSpam && redact {
150+
// TODO if event is older than when the process was started, check if it was already redacted on the server
151+
if caller != pdu.Sender.Homeserver() && finalRec == PSRecommendationSpam && redact && ps.redactionCache.Add(pdu.ID) {
148152
go func() {
149153
if _, err = evaluator.Bot.RedactEvent(context.WithoutCancel(ctx), pdu.RoomID, evtID); err != nil {
150154
log.Error().Err(err).Msg("Failed to redact event")

0 commit comments

Comments
 (0)