forked from TrueCloudLab/frostfs-node
c165d1a9b5
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
48 lines
990 B
Go
48 lines
990 B
Go
package loadroute
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
|
|
"github.com/nspcc-dev/neofs-sdk-go/container"
|
|
)
|
|
|
|
var errWrongRoute = errors.New("wrong route")
|
|
|
|
// CheckRoute checks if the route is a route correctly constructed by the builder for value a.
|
|
//
|
|
// Returns nil if route is correct, otherwise an error clarifying the inconsistency.
|
|
func CheckRoute(builder Builder, a container.SizeEstimation, route []ServerInfo) error {
|
|
for i := 1; i < len(route); i++ {
|
|
servers, err := builder.NextStage(a, route[:i])
|
|
if err != nil {
|
|
return err
|
|
} else if len(servers) == 0 {
|
|
break
|
|
}
|
|
|
|
found := false
|
|
|
|
for j := range servers {
|
|
if servers[j] == nil {
|
|
// nil route point means that
|
|
// (i-1)-th node in the route
|
|
// must, among other things,
|
|
// save the announcement to its
|
|
// local memory
|
|
continue
|
|
}
|
|
|
|
if bytes.Equal(servers[j].PublicKey(), route[i].PublicKey()) {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if !found {
|
|
return errWrongRoute
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|