Просмотр исходного кода

historysync: only save when backfill is enabled

Sumner Evans 3 лет назад
Родитель
Сommit
78c6d57299
2 измененных файлов с 30 добавлено и 24 удалено
  1. 24 22
      historysync.go
  2. 6 2
      user.go

+ 24 - 22
historysync.go

@@ -43,30 +43,32 @@ type wrappedInfo struct {
 }
 }
 
 
 func (user *User) handleHistorySyncsLoop() {
 func (user *User) handleHistorySyncsLoop() {
-	reCheckQueue := make(chan bool, 1)
-	if user.bridge.Config.Bridge.HistorySync.Backfill {
-		// Start the backfill queue.
-		user.BackfillQueue = &BackfillQueue{
-			BackfillQuery:             user.bridge.DB.BackfillQuery,
-			ImmediateBackfillRequests: make(chan *database.Backfill, 1),
-			DeferredBackfillRequests:  make(chan *database.Backfill, 1),
-			ReCheckQueue:              make(chan bool, 1),
-			log:                       user.log.Sub("BackfillQueue"),
-		}
-		reCheckQueue = user.BackfillQueue.ReCheckQueue
-
-		// Immediate backfills can be done in parallel
-		for i := 0; i < user.bridge.Config.Bridge.HistorySync.Immediate.WorkerCount; i++ {
-			go user.handleBackfillRequestsLoop(user.BackfillQueue.ImmediateBackfillRequests)
-		}
-
-		// Deferred backfills should be handled synchronously so as not to
-		// overload the homeserver. Users can configure their backfill stages
-		// to be more or less aggressive with backfilling at this stage.
-		go user.handleBackfillRequestsLoop(user.BackfillQueue.DeferredBackfillRequests)
-		go user.BackfillQueue.RunLoops(user)
+	if !user.bridge.Config.Bridge.HistorySync.Backfill {
+		return
 	}
 	}
 
 
+	reCheckQueue := make(chan bool, 1)
+	// Start the backfill queue.
+	user.BackfillQueue = &BackfillQueue{
+		BackfillQuery:             user.bridge.DB.BackfillQuery,
+		ImmediateBackfillRequests: make(chan *database.Backfill, 1),
+		DeferredBackfillRequests:  make(chan *database.Backfill, 1),
+		ReCheckQueue:              make(chan bool, 1),
+		log:                       user.log.Sub("BackfillQueue"),
+	}
+	reCheckQueue = user.BackfillQueue.ReCheckQueue
+
+	// Immediate backfills can be done in parallel
+	for i := 0; i < user.bridge.Config.Bridge.HistorySync.Immediate.WorkerCount; i++ {
+		go user.handleBackfillRequestsLoop(user.BackfillQueue.ImmediateBackfillRequests)
+	}
+
+	// Deferred backfills should be handled synchronously so as not to
+	// overload the homeserver. Users can configure their backfill stages
+	// to be more or less aggressive with backfilling at this stage.
+	go user.handleBackfillRequestsLoop(user.BackfillQueue.DeferredBackfillRequests)
+	go user.BackfillQueue.RunLoops(user)
+
 	// Always save the history syncs for the user. If they want to enable
 	// Always save the history syncs for the user. If they want to enable
 	// backfilling in the future, we will have it in the database.
 	// backfilling in the future, we will have it in the database.
 	for evt := range user.historySyncs {
 	for evt := range user.historySyncs {

+ 6 - 2
user.go

@@ -188,7 +188,9 @@ func (bridge *Bridge) NewUser(dbUser *database.User) *User {
 	user.RelayWhitelisted = user.bridge.Config.Bridge.Permissions.IsRelayWhitelisted(user.MXID)
 	user.RelayWhitelisted = user.bridge.Config.Bridge.Permissions.IsRelayWhitelisted(user.MXID)
 	user.Whitelisted = user.bridge.Config.Bridge.Permissions.IsWhitelisted(user.MXID)
 	user.Whitelisted = user.bridge.Config.Bridge.Permissions.IsWhitelisted(user.MXID)
 	user.Admin = user.bridge.Config.Bridge.Permissions.IsAdmin(user.MXID)
 	user.Admin = user.bridge.Config.Bridge.Permissions.IsAdmin(user.MXID)
-	go user.handleHistorySyncsLoop()
+	if user.bridge.Config.Bridge.HistorySync.Backfill {
+		go user.handleHistorySyncsLoop()
+	}
 	return user
 	return user
 }
 }
 
 
@@ -692,7 +694,9 @@ func (user *User) HandleEvent(event interface{}) {
 		portal := user.GetPortalByMessageSource(v.Info.MessageSource)
 		portal := user.GetPortalByMessageSource(v.Info.MessageSource)
 		portal.messages <- PortalMessage{undecryptable: v, source: user}
 		portal.messages <- PortalMessage{undecryptable: v, source: user}
 	case *events.HistorySync:
 	case *events.HistorySync:
-		user.historySyncs <- v
+		if user.bridge.Config.Bridge.HistorySync.Backfill {
+			user.historySyncs <- v
+		}
 	case *events.Mute:
 	case *events.Mute:
 		portal := user.GetPortalByJID(v.JID)
 		portal := user.GetPortalByJID(v.JID)
 		if portal != nil {
 		if portal != nil {