Merge pull request #59 from nspcc-dev/add-request-type

object: Add request type and `Type` function in `Request` interface
This commit is contained in:
Evgeniy Kulikov 2020-04-02 18:40:29 +03:00 committed by GitHub
commit 421bc9ab77
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 78 additions and 2 deletions

View file

@ -28,12 +28,13 @@ type (
Token = session.Token Token = session.Token
// Request defines object rpc requests. // Request defines object rpc requests.
// All object operations must have TTL, Epoch, Container ID and // All object operations must have TTL, Epoch, Type, Container ID and
// permission of usage previous network map. // permission of usage previous network map.
Request interface { Request interface {
service.MetaHeader service.MetaHeader
CID() CID CID() CID
Type() RequestType
AllowPreviousNetMap() bool AllowPreviousNetMap() bool
} }
) )
@ -169,3 +170,24 @@ func (m *GetRangeRequest) AllowPreviousNetMap() bool { return false }
// AllowPreviousNetMap returns permission to use previous network map in object get range hash request. // AllowPreviousNetMap returns permission to use previous network map in object get range hash request.
func (m *GetRangeHashRequest) AllowPreviousNetMap() bool { return false } func (m *GetRangeHashRequest) AllowPreviousNetMap() bool { return false }
// Type returns type of the object put request.
func (m *PutRequest) Type() RequestType { return RequestPut }
// Type returns type of the object get request.
func (m *GetRequest) Type() RequestType { return RequestGet }
// Type returns type of the object head request.
func (m *HeadRequest) Type() RequestType { return RequestHead }
// Type returns type of the object search request.
func (m *SearchRequest) Type() RequestType { return RequestSearch }
// Type returns type of the object delete request.
func (m *DeleteRequest) Type() RequestType { return RequestDelete }
// Type returns type of the object get range request.
func (m *GetRangeRequest) Type() RequestType { return RequestRange }
// Type returns type of the object get range hash request.
func (m *GetRangeHashRequest) Type() RequestType { return RequestRangeHash }

View file

@ -18,11 +18,22 @@ func TestRequest(t *testing.T) {
&GetRangeHashRequest{}, &GetRangeHashRequest{},
} }
types := []RequestType{
RequestPut,
RequestGet,
RequestHead,
RequestSearch,
RequestDelete,
RequestRange,
RequestRangeHash,
}
for i := range cases { for i := range cases {
v := cases[i] v := cases[i]
t.Run(fmt.Sprintf("%T", v), func(t *testing.T) { t.Run(fmt.Sprintf("%T", v), func(t *testing.T) {
require.NotPanics(t, func() { v.CID() }) require.NotPanics(t, func() { v.CID() })
require.Equal(t, types[i], v.Type())
}) })
} }
} }

View file

@ -28,7 +28,10 @@ type (
PRead(ctx context.Context, addr refs.Address, rng Range) ([]byte, error) PRead(ctx context.Context, addr refs.Address, rng Range) ([]byte, error)
} }
headerType int // RequestType of the object service requests.
RequestType int
headerType int
) )
const ( const (
@ -71,12 +74,52 @@ const (
PublicKeyHdr PublicKeyHdr
) )
const (
_ RequestType = iota
// RequestPut is a type for object put request.
RequestPut
// RequestGet is a type for object get request.
RequestGet
// RequestHead is a type for object head request.
RequestHead
// RequestSearch is a type for object search request.
RequestSearch
// RequestRange is a type for object range request.
RequestRange
// RequestRangeHash is a type for object hash range request.
RequestRangeHash
// RequestDelete is a type for object delete request.
RequestDelete
)
var ( var (
_ internal.Custom = (*Object)(nil) _ internal.Custom = (*Object)(nil)
emptyObject = new(Object).Bytes() emptyObject = new(Object).Bytes()
) )
// String returns printable name of the request type.
func (s RequestType) String() string {
switch s {
case RequestPut:
return "PUT"
case RequestGet:
return "GET"
case RequestHead:
return "HEAD"
case RequestSearch:
return "SEARCH"
case RequestRange:
return "RANGE"
case RequestRangeHash:
return "RANGE_HASH"
case RequestDelete:
return "DELETE"
default:
return "UNKNOWN"
}
}
// Bytes returns marshaled object in a binary format. // Bytes returns marshaled object in a binary format.
func (m Object) Bytes() []byte { data, _ := m.Marshal(); return data } func (m Object) Bytes() []byte { data, _ := m.Marshal(); return data }