Skip to content

Commit

Permalink
feat: oss get metadata (#1724)
Browse files Browse the repository at this point in the history
Signed-off-by: Jim Ma <majinjing3@gmail.com>
  • Loading branch information
jim3ma committed Oct 9, 2022
1 parent 8890feb commit 238c6ab
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
44 changes: 44 additions & 0 deletions pkg/source/clients/ossprotocol/oss_source_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,50 @@ func (osc *ossSourceClient) IsSupportRange(request *source.Request) (bool, error
return true, nil
}

func (osc *ossSourceClient) GetMetadata(request *source.Request) (*source.Metadata, error) {
request = request.Clone(request.Context())
request.Header.Set(headers.Range, "bytes=0-0")

client, err := osc.getClient(request.Header)
if err != nil {
return nil, fmt.Errorf("get oss client: %w", err)
}

bucket, err := client.Bucket(request.URL.Host)
if err != nil {
return nil, fmt.Errorf("get oss bucket %s: %w", request.URL.Host, err)
}

header, err := bucket.GetObjectMeta(request.URL.Path, getOptions(request.Header)...)
if err != nil {
return nil, fmt.Errorf("get oss object %s meta: %w", request.URL.Path, err)
}
totalContentLength, err := strconv.ParseInt(header.Get(oss.HTTPHeaderContentLength), 10, 64)
if err != nil {
return nil, fmt.Errorf("parse content-length str to int64: %w", err)
}

hdr := source.Header{}
for k, v := range header {
if len(v) > 0 {
hdr.Set(k, v[0])
}
}
return &source.Metadata{
Header: hdr,
Status: http.StatusText(http.StatusOK),
StatusCode: http.StatusOK,
SupportRange: true,
TotalContentLength: totalContentLength,
Validate: func() error {
return nil
},
Temporary: func() bool {
return false
},
}, nil
}

func (osc *ossSourceClient) IsExpired(request *source.Request, info *source.ExpireInfo) (bool, error) {
client, err := osc.getClient(request.Header)
if err != nil {
Expand Down
10 changes: 9 additions & 1 deletion pkg/source/source_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ func (c *clientWrapper) IsSupportRange(request *Request) (bool, error) {
func (c *clientWrapper) IsExpired(request *Request, info *ExpireInfo) (bool, error) {
return c.rc.IsExpired(c.adapter(request), info)
}

func (c *clientWrapper) Download(request *Request) (*Response, error) {
return c.rc.Download(c.adapter(request))
}
Expand Down Expand Up @@ -372,6 +373,7 @@ func List(request *Request) ([]URLEntry, error) {
if !ok {
return nil, fmt.Errorf("scheme %s: %w", request.URL.Scheme, ErrNoClientFound)
}
// invoke in-tree plugin adapter
if wrap, ok := client.(*clientWrapper); ok {
if rc, ok := wrap.rc.(ResourceLister); ok {
return rc.List(wrap.adapter(request))
Expand All @@ -389,7 +391,13 @@ func GetMetadata(request *Request) (*Metadata, error) {
if !ok {
return nil, fmt.Errorf("scheme %s: %w", request.URL.Scheme, ErrNoClientFound)
}
getter, ok := client.(*clientWrapper).rc.(ResourceMetadataGetter)
// invoke in-tree plugin adapter
if wrap, ok := client.(*clientWrapper); ok {
if rc, ok := wrap.rc.(ResourceMetadataGetter); ok {
return rc.GetMetadata(wrap.adapter(request))
}
}
getter, ok := client.(ResourceMetadataGetter)
if !ok {
return nil, fmt.Errorf("scheme %s: %w", request.URL.Scheme, ErrClientNotSupportGetMetadata)
}
Expand Down

0 comments on commit 238c6ab

Please sign in to comment.