Skip to content

Commit

Permalink
remove http.Headers type abstraction
Browse files Browse the repository at this point in the history
Signed-off-by: Itamar Perez <[email protected]>
  • Loading branch information
esomore committed Jul 18, 2024
1 parent d17d31e commit 6009615
Show file tree
Hide file tree
Showing 12 changed files with 49 additions and 50 deletions.
9 changes: 4 additions & 5 deletions pkg/persistence/in_memory_object_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"bytes"
"errors"
"io"
"net/http"
"strings"
"time"
)
Expand Down Expand Up @@ -153,18 +152,18 @@ func (o *inMemoryObjectStore) DeleteObject(bucket, key string) error {
return nil
}

func (o *inMemoryObjectStore) CreateSignedURL(bucket, key string, ttl time.Duration) (string, http.Header, error) {
func (o *inMemoryObjectStore) CreateSignedURL(bucket, key string, ttl time.Duration) (string, map[string][]string, error) {
bucketData, ok := o.Data[bucket]
if !ok {
return "", http.Header{}, errors.New("bucket not found")
return "", make(map[string][]string), errors.New("bucket not found")
}

_, ok = bucketData[key]
if !ok {
return "", http.Header{}, errors.New("key not found")
return "", make(map[string][]string), errors.New("key not found")
}

return "a-url", http.Header{}, nil
return "a-url", make(map[string][]string), nil
}

//
Expand Down
5 changes: 2 additions & 3 deletions pkg/persistence/mocks/backup_store.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 2 additions & 3 deletions pkg/persistence/mocks/object_store.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 3 additions & 4 deletions pkg/persistence/object_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"compress/gzip"
"encoding/json"
"io"
"net/http"
"strings"
"time"

Expand Down Expand Up @@ -93,7 +92,7 @@ type BackupStore interface {
DeleteRestore(name string) error
GetRestoredResourceList(name string) (map[string][]string, error)

GetDownloadURL(target velerov1api.DownloadTarget) (string, http.Header, error)
GetDownloadURL(target velerov1api.DownloadTarget) (string, map[string][]string, error)
}

// DownloadURLTTL is how long a download URL is valid for.
Expand Down Expand Up @@ -616,7 +615,7 @@ func (s *objectBackupStore) PutBackupContents(backup string, backupContents io.R
return seekAndPutObject(s.objectStore, s.bucket, s.layout.getBackupContentsKey(backup), backupContents)
}

func (s *objectBackupStore) GetDownloadURL(target velerov1api.DownloadTarget) (string, http.Header, error) {
func (s *objectBackupStore) GetDownloadURL(target velerov1api.DownloadTarget) (string, map[string][]string, error) {
switch target.Kind {
case velerov1api.DownloadTargetKindBackupContents:
return s.objectStore.CreateSignedURL(s.bucket, s.layout.getBackupContentsKey(target.Name), DownloadURLTTL)
Expand Down Expand Up @@ -647,7 +646,7 @@ func (s *objectBackupStore) GetDownloadURL(target velerov1api.DownloadTarget) (s
case velerov1api.DownloadTargetKindRestoreVolumeInfo:
return s.objectStore.CreateSignedURL(s.bucket, s.layout.getRestoreVolumeInfoKey(target.Name), DownloadURLTTL)
default:
return "", http.Header{}, errors.Errorf("unsupported download target kind %q", target.Kind)
return "", make(map[string][]string), errors.Errorf("unsupported download target kind %q", target.Kind)
}
}

Expand Down
5 changes: 2 additions & 3 deletions pkg/plugin/clientmgmt/restartable_object_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package clientmgmt

import (
"io"
"net/http"
"time"

"github.com/pkg/errors"
Expand Down Expand Up @@ -168,10 +167,10 @@ func (r *restartableObjectStore) DeleteObject(bucket string, key string) error {
}

// CreateSignedURL restarts the plugin's process if needed, then delegates the call.
func (r *restartableObjectStore) CreateSignedURL(bucket string, key string, ttl time.Duration) (string, http.Header, error) {
func (r *restartableObjectStore) CreateSignedURL(bucket string, key string, ttl time.Duration) (string, map[string][]string, error) {
delegate, err := r.getDelegate()
if err != nil {
return "", http.Header{}, err
return "", make(map[string][]string), err
}
return delegate.CreateSignedURL(bucket, key, ttl)
}
5 changes: 2 additions & 3 deletions pkg/plugin/clientmgmt/restartable_object_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package clientmgmt

import (
"io"
"net/http"
"strings"
"testing"
"time"
Expand Down Expand Up @@ -232,8 +231,8 @@ func TestRestartableObjectStoreDelegatedFunctions(t *testing.T) {
restartabletest.RestartableDelegateTest{
Function: "CreateSignedURL",
Inputs: []interface{}{"bucket", "key", 30 * time.Minute},
ExpectedErrorOutputs: []interface{}{"", http.Header{}, errors.Errorf("reset error")},
ExpectedDelegateOutputs: []interface{}{"signedURL", http.Header{}, errors.Errorf("delegate error")},
ExpectedErrorOutputs: []interface{}{"", make(map[string][]string), errors.Errorf("reset error")},
ExpectedDelegateOutputs: []interface{}{"signedURL", make(map[string][]string), errors.Errorf("delegate error")},
},
)
}
15 changes: 7 additions & 8 deletions pkg/plugin/framework/object_store_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package framework

import (
"io"
"net/http"
"time"

"github.com/pkg/errors"
Expand Down Expand Up @@ -207,7 +206,7 @@ func (c *ObjectStoreGRPCClient) DeleteObject(bucket, key string) error {
}

// CreateSignedURL creates a pre-signed URL for the given bucket and key that expires after ttl.
func (c *ObjectStoreGRPCClient) CreateSignedURL(bucket, key string, ttl time.Duration) (string, http.Header, error) {
func (c *ObjectStoreGRPCClient) CreateSignedURL(bucket, key string, ttl time.Duration) (string, map[string][]string, error) {
req := &proto.CreateSignedURLRequest{
Plugin: c.Plugin,
Bucket: bucket,
Expand All @@ -217,14 +216,14 @@ func (c *ObjectStoreGRPCClient) CreateSignedURL(bucket, key string, ttl time.Dur

res, err := c.grpcClient.CreateSignedURL(context.Background(), req)
if err != nil {
return "", http.Header{}, common.FromGRPCError(err)
return "", make(map[string][]string), common.FromGRPCError(err)
}

headers := make(http.Header)
for _, entry := range res.Headers {
for _, value := range entry.Value {
headers.Add(entry.Key, value)
}
// Convert res.Headers from map[string]*HeaderValues to map[string][]string
headers := make(map[string][]string)
for key, headerValues := range res.Headers {
headers[key] = headerValues.Values
}

return res.Url, headers, nil
}
11 changes: 6 additions & 5 deletions pkg/plugin/framework/object_store_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,11 +268,12 @@ func (s *ObjectStoreGRPCServer) CreateSignedURL(ctx context.Context, req *proto.
if err != nil {
return nil, common.NewGRPCError(err)
}
headerEntries := make([]*proto.HeaderEntry, 0, len(headers))

// Convert headers from map[string][]string to map[string]*proto.HeaderValues
protoHeaders := make(map[string]*proto.HeaderValues)
for key, values := range headers {
for _, value := range values {
headerEntries = append(headerEntries, &proto.HeaderEntry{Key: key, Value: []string{value}})
}
protoHeaders[key] = &proto.HeaderValues{Values: values}
}
return &proto.CreateSignedURLResponse{Url: url, Headers: headerEntries}, nil

return &proto.CreateSignedURLResponse{Url: url, Headers: protoHeaders}, nil
}
14 changes: 11 additions & 3 deletions pkg/plugin/generated/ObjectStore.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 5 additions & 6 deletions pkg/plugin/proto/ObjectStore.proto
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,13 @@ message CreateSignedURLRequest {
int64 ttl = 4;
}

message HeaderEntry {
string key = 1;
repeated string value = 2;
message CreateSignedURLResponse {
string url = 1;
map<string, HeaderValues> headers = 2;
}

message CreateSignedURLResponse {
repeated HeaderEntry headers = 1;
string url = 2;
message HeaderValues {
repeated string values = 1;
}

message ObjectStoreInitRequest {
Expand Down
9 changes: 4 additions & 5 deletions pkg/plugin/velero/mocks/object_store.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions pkg/plugin/velero/object_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package velero

import (
"io"
"net/http"
"time"
)

Expand Down Expand Up @@ -62,5 +61,5 @@ type ObjectStore interface {
DeleteObject(bucket, key string) error

// CreateSignedURL creates a pre-signed URL for the given bucket and key that expires after ttl.
CreateSignedURL(bucket, key string, ttl time.Duration) (string, http.Header, error)
CreateSignedURL(bucket, key string, ttl time.Duration) (string, map[string][]string, error)
}

0 comments on commit 6009615

Please sign in to comment.