Further optimisation, remove logs

This commit is contained in:
Till Faelligen 2022-11-01 13:29:11 +01:00
parent 88fcb1f1d6
commit 06850b06cd
No known key found for this signature in database
GPG key ID: 3DF82D8AB9211D4E
2 changed files with 28 additions and 12 deletions

View file

@ -20,7 +20,6 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util" "github.com/matrix-org/util"
@ -240,17 +239,42 @@ func (r *Queryer) QueryMembershipAtEvent(
return fmt.Errorf("unable to get state before event: %w", err) return fmt.Errorf("unable to get state before event: %w", err)
} }
start := time.Now() // If we only have one or less state entries, we can short circuit the below
// loop and avoid hitting the database
allStateEventNIDs := make(map[types.EventNID]types.StateEntry)
for _, eventID := range request.EventIDs { for _, eventID := range request.EventIDs {
stateEntry := stateEntries[eventID]
for _, s := range stateEntry {
allStateEventNIDs[s.EventNID] = s
}
}
var canShortCircuit bool
if len(allStateEventNIDs) <= 1 {
canShortCircuit = true
}
var memberships []types.Event
for i, eventID := range request.EventIDs {
stateEntry, ok := stateEntries[eventID] stateEntry, ok := stateEntries[eventID]
if !ok { if !ok {
response.Memberships[eventID] = []*gomatrixserverlib.HeaderedEvent{} response.Memberships[eventID] = []*gomatrixserverlib.HeaderedEvent{}
continue continue
} }
memberships, err := helpers.GetMembershipsAtState(ctx, r.DB, stateEntry, false)
// If we can short circuit, e.g. we only have 0 or 1 membership events, we only get the memberships
// once. If we have more than one membership event, we need to get the state for each state entry.
if canShortCircuit {
if i == 0 {
memberships, err = helpers.GetMembershipsAtState(ctx, r.DB, stateEntry, false)
}
} else {
memberships, err = helpers.GetMembershipsAtState(ctx, r.DB, stateEntry, false)
}
if err != nil { if err != nil {
return fmt.Errorf("unable to get memberships at state: %w", err) return fmt.Errorf("unable to get memberships at state: %w", err)
} }
res := make([]*gomatrixserverlib.HeaderedEvent, 0, len(memberships)) res := make([]*gomatrixserverlib.HeaderedEvent, 0, len(memberships))
for i := range memberships { for i := range memberships {
@ -261,7 +285,6 @@ func (r *Queryer) QueryMembershipAtEvent(
} }
response.Memberships[eventID] = res response.Memberships[eventID] = res
} }
logrus.Debugf("XXX: GetMembershipsAtState duration: %s", time.Since(start))
return nil return nil
} }

View file

@ -27,7 +27,6 @@ import (
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/opentracing/opentracing-go" "github.com/opentracing/opentracing-go"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/sirupsen/logrus"
"github.com/matrix-org/dendrite/roomserver/types" "github.com/matrix-org/dendrite/roomserver/types"
) )
@ -132,13 +131,11 @@ func (v *StateResolution) LoadMembershipAtEvent(
span, ctx := opentracing.StartSpanFromContext(ctx, "StateResolution.LoadMembershipAtEvent") span, ctx := opentracing.StartSpanFromContext(ctx, "StateResolution.LoadMembershipAtEvent")
defer span.Finish() defer span.Finish()
// De-dupe snapshotNIDs // Get a mapping from snapshotNID -> eventIDs
start := time.Now()
snapshotNIDMap, err := v.db.BulkSelectSnapshotsFromEventIDs(ctx, eventIDs) snapshotNIDMap, err := v.db.BulkSelectSnapshotsFromEventIDs(ctx, eventIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
logrus.Debugf("XXX: duration to lookup snapshot nids: %s", time.Since(start))
snapshotNIDs := make([]types.StateSnapshotNID, 0, len(snapshotNIDMap)) snapshotNIDs := make([]types.StateSnapshotNID, 0, len(snapshotNIDMap))
for nid := range snapshotNIDMap { for nid := range snapshotNIDMap {
@ -155,7 +152,6 @@ func (v *StateResolution) LoadMembershipAtEvent(
wantStateBlocks = append(wantStateBlocks, x.StateBlockNIDs...) wantStateBlocks = append(wantStateBlocks, x.StateBlockNIDs...)
} }
start = time.Now()
stateEntryLists, err := v.db.StateEntriesForTuples(ctx, uniqueStateBlockNIDs(wantStateBlocks), []types.StateKeyTuple{ stateEntryLists, err := v.db.StateEntriesForTuples(ctx, uniqueStateBlockNIDs(wantStateBlocks), []types.StateKeyTuple{
{ {
EventTypeNID: types.MRoomMemberNID, EventTypeNID: types.MRoomMemberNID,
@ -165,13 +161,11 @@ func (v *StateResolution) LoadMembershipAtEvent(
if err != nil { if err != nil {
return nil, err return nil, err
} }
logrus.Debugf("XXX: duration to lookup StateEntriesForTuples: %s", time.Since(start))
stateBlockNIDsMap := stateBlockNIDListMap(stateBlockNIDLists) stateBlockNIDsMap := stateBlockNIDListMap(stateBlockNIDLists)
stateEntriesMap := stateEntryListMap(stateEntryLists) stateEntriesMap := stateEntryListMap(stateEntryLists)
result := make(map[string][]types.StateEntry) result := make(map[string][]types.StateEntry)
start = time.Now()
for _, stateBlockNIDList := range stateBlockNIDLists { for _, stateBlockNIDList := range stateBlockNIDLists {
stateBlockNIDs, ok := stateBlockNIDsMap.lookup(stateBlockNIDList.StateSnapshotNID) stateBlockNIDs, ok := stateBlockNIDsMap.lookup(stateBlockNIDList.StateSnapshotNID)
if !ok { if !ok {
@ -195,7 +189,6 @@ func (v *StateResolution) LoadMembershipAtEvent(
} }
} }
} }
logrus.Debugf("XXX: duration to generate list: %s", time.Since(start))
return result, nil return result, nil
} }