frostfs-s3-lifecycler/internal/frostfs/frostfs.go
Denis Kirillov 2ee8967547 [#4] Support aborting multiparts
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2024-07-26 14:52:16 +03:00

66 lines
1.6 KiB
Go

package frostfs
import (
"context"
"fmt"
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool"
"go.uber.org/zap"
)
// FrostFS represents virtual connection to the FrostFS network.
// It is used to provide an interface to dependent packages
// which work with FrostFS.
type FrostFS struct {
pool *pool.Pool
log *zap.Logger
}
// NewFrostFS creates new FrostFS using provided pool.Pool.
func NewFrostFS(p *pool.Pool, log *zap.Logger) *FrostFS {
return &FrostFS{
pool: p,
log: log,
}
}
func (f *FrostFS) GetObject(ctx context.Context, addr oid.Address) (pool.ResGetObject, error) {
var prm pool.PrmObjectGet
prm.SetAddress(addr)
addBearer(ctx, &prm)
return f.pool.GetObject(ctx, prm)
}
func (f *FrostFS) DeleteObject(ctx context.Context, addr oid.Address) error {
var prm pool.PrmObjectDelete
prm.SetAddress(addr)
addBearer(ctx, &prm)
return f.pool.DeleteObject(ctx, prm)
}
func (f *FrostFS) NetworkInfo(ctx context.Context) (*netmap.NetworkInfo, error) {
networkInfo, err := f.pool.NetworkInfo(ctx)
if err != nil {
return nil, fmt.Errorf("get network info via client: %w", err)
}
return &networkInfo, nil
}
type WithBearerParam interface {
UseBearer(token bearer.Token)
}
func addBearer(ctx context.Context, prm WithBearerParam) {
if bd, err := middleware.GetBoxData(ctx); err == nil {
if bd.Gate.BearerToken != nil {
prm.UseBearer(*bd.Gate.BearerToken)
}
}
}