Tweaks, use the roomUpdater to avoid a DB deadlock

This commit is contained in:
Till Faelligen 2023-10-30 10:10:22 +01:00
parent 64f70f98cf
commit 16b97f9e6c
No known key found for this signature in database
GPG key ID: ACCDC9606D472758

View file

@ -233,6 +233,7 @@ func main() {
} }
fmt.Println("Resolving state") fmt.Println("Resolving state")
stateResStart := time.Now()
var resolved Events var resolved Events
resolved, err = gomatrixserverlib.ResolveConflicts( resolved, err = gomatrixserverlib.ResolveConflicts(
gomatrixserverlib.RoomVersion(*roomVersion), events, authEvents, func(roomID spec.RoomID, senderID spec.SenderID) (*spec.UserID, error) { gomatrixserverlib.RoomVersion(*roomVersion), events, authEvents, func(roomID spec.RoomID, senderID spec.SenderID) (*spec.UserID, error) {
@ -250,7 +251,7 @@ func main() {
panic(err) panic(err)
} }
fmt.Println("Resolved state contains", len(resolved), "events") fmt.Printf("Resolved state contains %d events (resolution took %s)\n", len(resolved), time.Since(stateResStart))
sort.Sort(resolved) sort.Sort(resolved)
filteringEventType := *filterType filteringEventType := *filterType
count := 0 count := 0
@ -288,10 +289,12 @@ func main() {
stateEntriesResolved[i] = eventNIDMap[eventNID] stateEntriesResolved[i] = eventNIDMap[eventNID]
} }
var succeeded bool
roomUpdater, err := roomserverDB.GetRoomUpdater(ctx, roomInfo) roomUpdater, err := roomserverDB.GetRoomUpdater(ctx, roomInfo)
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer sqlutil.EndTransactionWithCheck(roomUpdater, &succeeded, &err)
latestEvents := make([]types.StateAtEventAndReference, 0, len(roomUpdater.LatestEvents())) latestEvents := make([]types.StateAtEventAndReference, 0, len(roomUpdater.LatestEvents()))
for _, event := range roomUpdater.LatestEvents() { for _, event := range roomUpdater.LatestEvents() {
@ -305,25 +308,29 @@ func main() {
}) })
} }
lastEventSent, err := roomserverDB.EventsFromIDs(ctx, roomInfo, []string{roomUpdater.LastEventIDSent()}) var lastEventSent []types.Event
lastEventSent, err = roomUpdater.EventsFromIDs(ctx, roomInfo, []string{roomUpdater.LastEventIDSent()})
if err != nil { if err != nil {
panic(err) fmt.Printf("Error: %s", err)
return
} }
if len(lastEventSent) != 1 { if len(lastEventSent) != 1 {
panic("expected to get one event from the database but didn't") fmt.Printf("Error: expected to get one event from the database but didn't, got %d", len(lastEventSent))
return
} }
newSnapshotNID, err := roomserverDB.AddState(ctx, roomInfo.RoomNID, nil, stateEntriesResolved) var newSnapshotNID types.StateSnapshotNID
newSnapshotNID, err = roomUpdater.AddState(ctx, roomInfo.RoomNID, nil, stateEntriesResolved)
if err != nil { if err != nil {
panic(err) fmt.Printf("Error: %s", err)
return
} }
if err = roomUpdater.SetLatestEvents(roomInfo.RoomNID, latestEvents, lastEventSent[0].EventNID, newSnapshotNID); err != nil { if err = roomUpdater.SetLatestEvents(roomInfo.RoomNID, latestEvents, lastEventSent[0].EventNID, newSnapshotNID); err != nil {
panic(err) fmt.Printf("Error: %s", err)
} return
if err = roomUpdater.Commit(); err != nil {
panic(err)
} }
succeeded = true
fmt.Printf("Successfully set new snapshot NID %d containing %d state events", newSnapshotNID, len(stateEntriesResolved)) fmt.Printf("Successfully set new snapshot NID %d containing %d state events", newSnapshotNID, len(stateEntriesResolved))
} }