forked from TrueCloudLab/frostfs-api-go
[#416] session: Support new format of object session context
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
504e427c18
commit
5fc2644c68
8 changed files with 83 additions and 23 deletions
BIN
netmap/grpc/types.pb.go
generated
BIN
netmap/grpc/types.pb.go
generated
Binary file not shown.
BIN
object/grpc/service_grpc.pb.go
generated
BIN
object/grpc/service_grpc.pb.go
generated
Binary file not shown.
|
@ -674,7 +674,7 @@ func (c *ObjectSessionContext) ToGRPCMessage() grpc.Message {
|
||||||
m = new(session.ObjectSessionContext)
|
m = new(session.ObjectSessionContext)
|
||||||
|
|
||||||
m.SetVerb(ObjectSessionVerbToGRPCField(c.verb))
|
m.SetVerb(ObjectSessionVerbToGRPCField(c.verb))
|
||||||
m.SetAddress(c.addr.ToGRPCMessage().(*refsGRPC.Address))
|
m.SetTarget(c.cnr.ToGRPCMessage().(*refsGRPC.ContainerID), refs.ObjectIDListToGRPCMessage(c.objs))
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -688,20 +688,25 @@ func (c *ObjectSessionContext) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
addr := v.GetAddress()
|
cnr := v.GetTarget().GetContainer()
|
||||||
if addr == nil {
|
if cnr == nil {
|
||||||
c.addr = nil
|
c.cnr = nil
|
||||||
} else {
|
} else {
|
||||||
if c.addr == nil {
|
if c.cnr == nil {
|
||||||
c.addr = new(refs.Address)
|
c.cnr = new(refs.ContainerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.addr.FromGRPCMessage(addr)
|
err = c.cnr.FromGRPCMessage(cnr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.objs, err = refs.ObjectIDListFromGRPCMessage(v.GetTarget().GetObjects())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
c.verb = ObjectSessionVerbFromGRPCField(v.GetVerb())
|
c.verb = ObjectSessionVerbFromGRPCField(v.GetVerb())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -65,9 +65,12 @@ func (m *SessionToken_Body) SetContainerSessionContext(v *ContainerSessionContex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetAddress sets address of the object related to the session.
|
// SetTarget specifies objects involved in the object session.
|
||||||
func (m *ObjectSessionContext) SetAddress(v *refs.Address) {
|
func (m *ObjectSessionContext) SetTarget(cnr *refs.ContainerID, objs []*refs.ObjectID) {
|
||||||
m.Address = v
|
m.Target = &ObjectSessionContext_Target{
|
||||||
|
Container: cnr,
|
||||||
|
Objects: objs,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetVerb sets type of request for which the token is issued.
|
// SetVerb sets type of request for which the token is issued.
|
||||||
|
|
BIN
session/grpc/types.pb.go
generated
BIN
session/grpc/types.pb.go
generated
Binary file not shown.
|
@ -21,8 +21,8 @@ const (
|
||||||
lifetimeNotValidBeforeField = 2
|
lifetimeNotValidBeforeField = 2
|
||||||
lifetimeIssuedAtField = 3
|
lifetimeIssuedAtField = 3
|
||||||
|
|
||||||
objectCtxVerbField = 1
|
objectCtxVerbField = 1
|
||||||
objectCtxAddressField = 2
|
objectCtxTargetField = 2
|
||||||
|
|
||||||
sessionTokenBodyIDField = 1
|
sessionTokenBodyIDField = 1
|
||||||
sessionTokenBodyOwnerField = 2
|
sessionTokenBodyOwnerField = 2
|
||||||
|
@ -210,10 +210,11 @@ func (c *ObjectSessionContext) StableMarshal(buf []byte) []byte {
|
||||||
buf = make([]byte, c.StableSize())
|
buf = make([]byte, c.StableSize())
|
||||||
}
|
}
|
||||||
|
|
||||||
var offset int
|
offset := proto.EnumMarshal(objectCtxVerbField, buf, int32(c.verb))
|
||||||
|
proto.NestedStructureMarshal(objectCtxTargetField, buf[offset:], &objectSessionContextTarget{
|
||||||
offset += proto.EnumMarshal(objectCtxVerbField, buf[offset:], int32(c.verb))
|
cnr: c.cnr,
|
||||||
proto.NestedStructureMarshal(objectCtxAddressField, buf[offset:], c.addr)
|
objs: c.objs,
|
||||||
|
})
|
||||||
|
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
@ -224,7 +225,10 @@ func (c *ObjectSessionContext) StableSize() (size int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
size += proto.EnumSize(objectCtxVerbField, int32(c.verb))
|
size += proto.EnumSize(objectCtxVerbField, int32(c.verb))
|
||||||
size += proto.NestedStructureSize(objectCtxAddressField, c.addr)
|
size += proto.NestedStructureSize(objectCtxTargetField, &objectSessionContextTarget{
|
||||||
|
cnr: c.cnr,
|
||||||
|
objs: c.objs,
|
||||||
|
})
|
||||||
|
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,7 +195,7 @@ func GenerateObjectSessionContext(empty bool) *session.ObjectSessionContext {
|
||||||
|
|
||||||
if !empty {
|
if !empty {
|
||||||
m.SetVerb(session.ObjectVerbHead)
|
m.SetVerb(session.ObjectVerbHead)
|
||||||
m.SetAddress(refstest.GenerateAddress(false))
|
m.SetTarget(refstest.GenerateContainerID(false), refstest.GenerateObjectIDs(false)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/acl"
|
"github.com/nspcc-dev/neofs-api-go/v2/acl"
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/status"
|
"github.com/nspcc-dev/neofs-api-go/v2/status"
|
||||||
|
"github.com/nspcc-dev/neofs-api-go/v2/util/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateRequestBody struct {
|
type CreateRequestBody struct {
|
||||||
|
@ -40,10 +41,48 @@ type TokenLifetime struct {
|
||||||
|
|
||||||
type ObjectSessionVerb uint32
|
type ObjectSessionVerb uint32
|
||||||
|
|
||||||
|
type objectSessionContextTarget struct {
|
||||||
|
cnr *refs.ContainerID
|
||||||
|
|
||||||
|
objs []refs.ObjectID
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ = iota
|
||||||
|
fNumObjectTargetContainer
|
||||||
|
fNumObjectTargetObjects
|
||||||
|
)
|
||||||
|
|
||||||
|
func (x objectSessionContextTarget) StableMarshal(buf []byte) []byte {
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, x.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
offset := proto.NestedStructureMarshal(fNumObjectTargetContainer, buf, x.cnr)
|
||||||
|
|
||||||
|
for i := range x.objs {
|
||||||
|
offset += proto.NestedStructureMarshal(fNumObjectTargetObjects, buf[offset:], &x.objs[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x objectSessionContextTarget) StableSize() (size int) {
|
||||||
|
size += proto.NestedStructureSize(fNumObjectTargetContainer, x.cnr)
|
||||||
|
|
||||||
|
for i := range x.objs {
|
||||||
|
size += proto.NestedStructureSize(fNumObjectTargetObjects, &x.objs[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
type ObjectSessionContext struct {
|
type ObjectSessionContext struct {
|
||||||
verb ObjectSessionVerb
|
verb ObjectSessionVerb
|
||||||
|
|
||||||
addr *refs.Address
|
cnr *refs.ContainerID
|
||||||
|
|
||||||
|
objs []refs.ObjectID
|
||||||
}
|
}
|
||||||
|
|
||||||
type TokenContext interface {
|
type TokenContext interface {
|
||||||
|
@ -617,16 +656,25 @@ func (c *ObjectSessionContext) SetVerb(v ObjectSessionVerb) {
|
||||||
c.verb = v
|
c.verb = v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ObjectSessionContext) GetAddress() *refs.Address {
|
func (c *ObjectSessionContext) GetContainer() *refs.ContainerID {
|
||||||
if c != nil {
|
if c != nil {
|
||||||
return c.addr
|
return c.cnr
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ObjectSessionContext) SetAddress(v *refs.Address) {
|
func (c *ObjectSessionContext) GetObjects() []refs.ObjectID {
|
||||||
c.addr = v
|
if c != nil {
|
||||||
|
return c.objs
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ObjectSessionContext) SetTarget(cnr *refs.ContainerID, objs ...refs.ObjectID) {
|
||||||
|
c.cnr = cnr
|
||||||
|
c.objs = objs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TokenBody) GetID() []byte {
|
func (t *TokenBody) GetID() []byte {
|
||||||
|
|
Loading…
Reference in a new issue