forked from TrueCloudLab/frostfs-node
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package getsvc
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
|
|
netmapCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap"
|
|
netmapSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
|
|
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
)
|
|
|
|
type RemoteGetPrm struct {
|
|
Address oid.Address
|
|
Node netmapSDK.NodeInfo
|
|
}
|
|
|
|
type RemoteGetter struct {
|
|
s remoteStorageConstructor
|
|
es epochSource
|
|
ks keyStorage
|
|
}
|
|
|
|
func (g *RemoteGetter) Get(ctx context.Context, prm RemoteGetPrm) (*objectSDK.Object, error) {
|
|
var nodeInfo client.NodeInfo
|
|
if err := client.NodeInfoFromRawNetmapElement(&nodeInfo, netmapCore.Node(prm.Node)); err != nil {
|
|
return nil, err
|
|
}
|
|
rs, err := g.s.Get(nodeInfo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
epoch, err := g.es.Epoch()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
key, err := g.ks.GetKey(nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
r := RemoteRequestParams{
|
|
Epoch: epoch,
|
|
TTL: 1,
|
|
PrivateKey: key,
|
|
}
|
|
return rs.Get(ctx, prm.Address, r)
|
|
}
|
|
|
|
func NewRemoteGetter(cc clientConstructor, es epochSource, ks keyStorage) *RemoteGetter {
|
|
return &RemoteGetter{
|
|
s: &multiclientRemoteStorageConstructor{clientConstructor: cc},
|
|
es: es,
|
|
ks: ks,
|
|
}
|
|
}
|