change GetChainMessages api to include tipsets for validation
This commit is contained in:
parent
44b52941f7
commit
5663b2d697
@ -217,6 +217,7 @@ func (c *client) processResponse(req *Request, res *Response) (*validatedRespons
|
|||||||
}
|
}
|
||||||
|
|
||||||
if options.ValidateMessages {
|
if options.ValidateMessages {
|
||||||
|
// if the request includes target tipsets, validate against them
|
||||||
chain := make([]*BSTipSet, 0, resLength)
|
chain := make([]*BSTipSet, 0, resLength)
|
||||||
for i, resChain := range res.Chain {
|
for i, resChain := range res.Chain {
|
||||||
next := &BSTipSet{
|
next := &BSTipSet{
|
||||||
@ -318,7 +319,10 @@ func (c *client) GetFullTipSet(ctx context.Context, peer peer.ID, tsk types.TipS
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there.
|
// GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there.
|
||||||
func (c *client) GetChainMessages(ctx context.Context, head *types.TipSet, length uint64) ([]*CompactedMessages, error) {
|
func (c *client) GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*CompactedMessages, error) {
|
||||||
|
head := tipsets[0]
|
||||||
|
length := uint64(len(tipsets))
|
||||||
|
|
||||||
ctx, span := trace.StartSpan(ctx, "GetChainMessages")
|
ctx, span := trace.StartSpan(ctx, "GetChainMessages")
|
||||||
if span.IsRecordingEvents() {
|
if span.IsRecordingEvents() {
|
||||||
span.AddAttributes(
|
span.AddAttributes(
|
||||||
@ -331,7 +335,8 @@ func (c *client) GetChainMessages(ctx context.Context, head *types.TipSet, lengt
|
|||||||
req := &Request{
|
req := &Request{
|
||||||
Head: head.Cids(),
|
Head: head.Cids(),
|
||||||
Length: length,
|
Length: length,
|
||||||
Options: Messages,
|
Options: Messages | Validate,
|
||||||
|
TipSets: tipsets,
|
||||||
}
|
}
|
||||||
|
|
||||||
validRes, err := c.doRequest(ctx, req, nil)
|
validRes, err := c.doRequest(ctx, req, nil)
|
||||||
|
@ -32,10 +32,9 @@ type Client interface {
|
|||||||
// or less.
|
// or less.
|
||||||
GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error)
|
GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error)
|
||||||
|
|
||||||
// GetChainMessages fetches messages from the network, from the provided
|
// GetChainMessages fetches messages from the network, starting from the first provided tipset
|
||||||
// tipset *backwards*, returning the messages from as many tipsets as the
|
// and returning messages from as many tipsets as requested or less.
|
||||||
// count parameter, or less.
|
GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*CompactedMessages, error)
|
||||||
GetChainMessages(ctx context.Context, head *types.TipSet, length uint64) ([]*CompactedMessages, error)
|
|
||||||
|
|
||||||
// GetFullTipSet fetches a full tipset from a given peer. If successful,
|
// GetFullTipSet fetches a full tipset from a given peer. If successful,
|
||||||
// the fetched object contains block headers and all messages in full form.
|
// the fetched object contains block headers and all messages in full form.
|
||||||
|
@ -1555,7 +1555,7 @@ func (syncer *Syncer) fetchMessages(ctx context.Context, headers []*types.TipSet
|
|||||||
failed := false
|
failed := false
|
||||||
for offset := 0; !failed && offset < nreq; {
|
for offset := 0; !failed && offset < nreq; {
|
||||||
nextI := j + offset
|
nextI := j + offset
|
||||||
nextHeader := headers[nextI]
|
lastI := j + nreq
|
||||||
|
|
||||||
var requestErr error
|
var requestErr error
|
||||||
var requestResult []*exchange.CompactedMessages
|
var requestResult []*exchange.CompactedMessages
|
||||||
@ -1566,7 +1566,7 @@ func (syncer *Syncer) fetchMessages(ctx context.Context, headers []*types.TipSet
|
|||||||
log.Infof("fetching messages at %d", startOffset+nextI)
|
log.Infof("fetching messages at %d", startOffset+nextI)
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := syncer.Exchange.GetChainMessages(ctx, nextHeader, uint64(nreq-offset))
|
result, err := syncer.Exchange.GetChainMessages(ctx, headers[nextI:lastI])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
requestErr = multierror.Append(requestErr, err)
|
requestErr = multierror.Append(requestErr, err)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user