Fix #2027 by gracefully handling stub rooms (#2100)

The server ACL code on startup will grab all known rooms from
the rooms_table and then call `GetStateEvent` with each found
room ID to find the server ACL event. This can fail for stub
rooms, which will be present in the rooms table. Previously
this would result in an error being returned and the server
failing to start (!). Now we just return no event for stub
rooms.
This commit is contained in:
kegsay 2022-01-21 14:23:37 +00:00 committed by GitHub
parent 2c581377a5
commit 0bf5104bbb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -842,9 +842,13 @@ func (d *Database) GetStateEvent(ctx context.Context, roomID, evType, stateKey s
if err != nil { if err != nil {
return nil, err return nil, err
} }
if roomInfo == nil || roomInfo.IsStub { if roomInfo == nil {
return nil, fmt.Errorf("room %s doesn't exist", roomID) return nil, fmt.Errorf("room %s doesn't exist", roomID)
} }
// e.g invited rooms
if roomInfo.IsStub {
return nil, nil
}
eventTypeNID, err := d.EventTypesTable.SelectEventTypeNID(ctx, nil, evType) eventTypeNID, err := d.EventTypesTable.SelectEventTypeNID(ctx, nil, evType)
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
// No rooms have an event of this type, otherwise we'd have an event type NID // No rooms have an event of this type, otherwise we'd have an event type NID