Skip to content

Commit

Permalink
Speed up StateListMessages in some cases
Browse files Browse the repository at this point in the history
  • Loading branch information
arajasek committed Apr 10, 2021
1 parent 1e6bba5 commit ff48a70
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions node/impl/full/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -822,8 +822,31 @@ func (a *StateAPI) StateListMessages(ctx context.Context, match *api.MessageMatc

if match.To == address.Undef && match.From == address.Undef {
return nil, xerrors.Errorf("must specify at least To or From in message filter")
} else if match.To != address.Undef {
_, err := a.StateLookupID(ctx, match.To, tsk)

// if the recipient doesn't exist at the start point, we're not gonna find any matches
if xerrors.Is(err, types.ErrActorNotFound) {
return nil, nil
}

if err != nil {
return nil, xerrors.Errorf("looking up match.To: %w", err)
}
} else if match.From != address.Undef {
_, err := a.StateLookupID(ctx, match.From, tsk)

// if the sender doesn't exist at the start point, we're not gonna find any matches
if xerrors.Is(err, types.ErrActorNotFound) {
return nil, nil
}

if err != nil {
return nil, xerrors.Errorf("looking up match.From: %w", err)
}
}

// TODO: This should probably match on both ID and robust address, no?
matchFunc := func(msg *types.Message) bool {
if match.From != address.Undef && match.From != msg.From {
return false
Expand Down

0 comments on commit ff48a70

Please sign in to comment.