Make backfill limits configurable

This commit is contained in:
Tulir Asokan 2023-07-20 01:44:59 +03:00
parent 8e814bd05b
commit e0df07e384
4 changed files with 25 additions and 4 deletions

View file

@ -40,10 +40,14 @@ func (portal *Portal) initialForwardBackfill(user *User, markRead bool) {
Logger() Logger()
ctx := log.WithContext(context.TODO()) ctx := log.WithContext(context.TODO())
portal.forwardBackfill(ctx, user, time.Time{}, 50, markRead) portal.forwardBackfill(ctx, user, time.Time{}, portal.bridge.Config.Bridge.Backfill.InitialLimit, markRead)
} }
func (portal *Portal) missedForwardBackfill(user *User, lastMessageTS time.Time, lastMessageID string, markRead bool) bool { func (portal *Portal) missedForwardBackfill(user *User, lastMessageTS time.Time, lastMessageID string, markRead bool) bool {
if portal.bridge.Config.Bridge.Backfill.MissedLimit == 0 {
return false
}
portal.forwardBackfillLock.Lock() portal.forwardBackfillLock.Lock()
defer portal.forwardBackfillLock.Unlock() defer portal.forwardBackfillLock.Unlock()
log := portal.zlog.With(). log := portal.zlog.With().
@ -76,7 +80,7 @@ func (portal *Portal) missedForwardBackfill(user *User, lastMessageTS time.Time,
Str("latest_message_id", lastMessageID). Str("latest_message_id", lastMessageID).
Time("last_bridged_ts", portal.lastMessageTS). Time("last_bridged_ts", portal.lastMessageTS).
Msg("Backfilling missed messages") Msg("Backfilling missed messages")
return portal.forwardBackfill(ctx, user, portal.lastMessageTS, 100, markRead) return portal.forwardBackfill(ctx, user, portal.lastMessageTS, portal.bridge.Config.Bridge.Backfill.MissedLimit, markRead)
} }
func (portal *Portal) deterministicEventID(messageID string, part int) id.EventID { func (portal *Portal) deterministicEventID(messageID string, part int) id.EventID {
@ -85,9 +89,13 @@ func (portal *Portal) deterministicEventID(messageID string, part int) id.EventI
return id.EventID(fmt.Sprintf("$%s:messages.google.com", base64.RawURLEncoding.EncodeToString(sum[:]))) return id.EventID(fmt.Sprintf("$%s:messages.google.com", base64.RawURLEncoding.EncodeToString(sum[:])))
} }
func (portal *Portal) forwardBackfill(ctx context.Context, user *User, after time.Time, limit int64, markRead bool) bool { func (portal *Portal) forwardBackfill(ctx context.Context, user *User, after time.Time, limit int, markRead bool) bool {
if limit == 0 {
return false
}
log := zerolog.Ctx(ctx) log := zerolog.Ctx(ctx)
resp, err := user.Client.FetchMessages(portal.ID, limit, nil) resp, err := user.Client.FetchMessages(portal.ID, int64(limit), nil)
if err != nil { if err != nil {
portal.zlog.Error().Err(err).Msg("Failed to fetch messages") portal.zlog.Error().Err(err).Msg("Failed to fetch messages")
return false return false

View file

@ -39,6 +39,11 @@ type BridgeConfig struct {
SyncDirectChatList bool `yaml:"sync_direct_chat_list"` SyncDirectChatList bool `yaml:"sync_direct_chat_list"`
InitialChatSyncCount int `yaml:"initial_chat_sync_count"` InitialChatSyncCount int `yaml:"initial_chat_sync_count"`
Backfill struct {
InitialLimit int `yaml:"initial_limit"`
MissedLimit int `yaml:"missed_limit"`
} `yaml:"backfill"`
DoublePuppetServerMap map[string]string `yaml:"double_puppet_server_map"` DoublePuppetServerMap map[string]string `yaml:"double_puppet_server_map"`
DoublePuppetAllowDiscovery bool `yaml:"double_puppet_allow_discovery"` DoublePuppetAllowDiscovery bool `yaml:"double_puppet_allow_discovery"`
LoginSharedSecretMap map[string]string `yaml:"login_shared_secret_map"` LoginSharedSecretMap map[string]string `yaml:"login_shared_secret_map"`

View file

@ -44,6 +44,8 @@ func DoUpgrade(helper *up.Helper) {
helper.Copy(up.Int, "bridge", "portal_message_buffer") helper.Copy(up.Int, "bridge", "portal_message_buffer")
helper.Copy(up.Bool, "bridge", "sync_direct_chat_list") helper.Copy(up.Bool, "bridge", "sync_direct_chat_list")
helper.Copy(up.Int, "bridge", "initial_chat_sync_count") helper.Copy(up.Int, "bridge", "initial_chat_sync_count")
helper.Copy(up.Int, "bridge", "backfill", "initial_limit")
helper.Copy(up.Int, "bridge", "backfill", "missed_limit")
helper.Copy(up.Map, "bridge", "double_puppet_server_map") helper.Copy(up.Map, "bridge", "double_puppet_server_map")
helper.Copy(up.Bool, "bridge", "double_puppet_allow_discovery") helper.Copy(up.Bool, "bridge", "double_puppet_allow_discovery")
helper.Copy(up.Map, "bridge", "login_shared_secret_map") helper.Copy(up.Map, "bridge", "login_shared_secret_map")

View file

@ -126,6 +126,12 @@ bridge:
sync_direct_chat_list: false sync_direct_chat_list: false
# Number of chats to sync when connecting to Google Messages. # Number of chats to sync when connecting to Google Messages.
initial_chat_sync_count: 25 initial_chat_sync_count: 25
# Backfill settings
backfill:
# Number of messages to backfill in new chats.
initial_limit: 50
# Number of messages to backfill on startup if the last message ID in the chat sync doesn't match the last bridged message.
missed_limit: 100
# Servers to always allow double puppeting from # Servers to always allow double puppeting from
double_puppet_server_map: double_puppet_server_map: