[#274] innerring: Implement GetRangeHash in audit communicator
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
6977adec66
commit
f593f0b2d6
1 changed files with 31 additions and 1 deletions
|
@ -149,5 +149,35 @@ func (c *ClientCache) GetHeader(task *audit.Task, node *netmap.Node, id *object.
|
||||||
// GetRangeHash requests node from the container under audit to return Tillich-Zemor hash of the
|
// GetRangeHash requests node from the container under audit to return Tillich-Zemor hash of the
|
||||||
// payload range of the object with specified identifier.
|
// payload range of the object with specified identifier.
|
||||||
func (c *ClientCache) GetRangeHash(task *audit.Task, node *netmap.Node, id *object.ID, rng *object.Range) ([]byte, error) {
|
func (c *ClientCache) GetRangeHash(task *audit.Task, node *netmap.Node, id *object.ID, rng *object.Range) ([]byte, error) {
|
||||||
panic("implement me")
|
objAddress := new(object.Address)
|
||||||
|
objAddress.SetContainerID(task.ContainerID())
|
||||||
|
objAddress.SetObjectID(id)
|
||||||
|
|
||||||
|
rangeParams := new(client.RangeChecksumParams)
|
||||||
|
rangeParams.WithAddress(objAddress)
|
||||||
|
rangeParams.WithRangeList(rng)
|
||||||
|
rangeParams.WithSalt(nil) // it MUST be nil for correct hash concatenation in PDP game
|
||||||
|
|
||||||
|
addr, err := network.IPAddrFromMultiaddr(node.Address())
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("can't parse remote address %s: %w", node.Address(), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cli, err := c.Get(addr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("can't setup remote connection with %s: %w", addr, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cctx, cancel := context.WithTimeout(task.AuditContext(), c.rangeTimeout)
|
||||||
|
result, err := cli.ObjectPayloadRangeTZ(cctx, rangeParams, client.WithTTL(1))
|
||||||
|
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("object rangehash error: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// client guarantees that request and response have equal amount of ranges
|
||||||
|
|
||||||
|
return result[0][:], nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue