Skip to content

Commit 450178e

Browse files
committed
[content-service] fix s3 access when using dedicated bucket
1 parent e0244ff commit 450178e

File tree

9 files changed

+38
-30
lines changed

9 files changed

+38
-30
lines changed

components/content-service/pkg/layer/provider_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,11 @@ func (s *testStorage) DeleteBucket(ctx context.Context, bucket string) error {
244244
return nil
245245
}
246246

247-
func (*testStorage) BackupObject(workspaceID string, name string) string {
247+
func (*testStorage) BackupObject(ownerID string, workspaceID string, name string) string {
248248
return ""
249249
}
250250

251-
func (*testStorage) InstanceObject(workspaceID string, instanceID string, name string) string {
251+
func (*testStorage) InstanceObject(ownerID string, workspaceID string, instanceID string, name string) string {
252252
return ""
253253
}
254254

components/content-service/pkg/service/headless-log-service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (ls *HeadlessLogService) LogDownloadURL(ctx context.Context, req *api.LogDo
5454
span.SetTag("instanceId", req.InstanceId)
5555
defer tracing.FinishSpan(span, &err)
5656

57-
blobName := ls.s.InstanceObject(req.WorkspaceId, req.InstanceId, logs.UploadedHeadlessLogPath(req.TaskId))
57+
blobName := ls.s.InstanceObject(req.OwnerId, req.WorkspaceId, req.InstanceId, logs.UploadedHeadlessLogPath(req.TaskId))
5858
info, err := ls.s.SignDownload(ctx, ls.s.Bucket(req.OwnerId), blobName, &storage.SignedURLOptions{})
5959
if err != nil {
6060
log.WithFields(log.OWI(req.OwnerId, req.WorkspaceId, "")).
@@ -87,7 +87,7 @@ func (ls *HeadlessLogService) ListLogs(ctx context.Context, req *api.ListLogsReq
8787
// we do not need to check whether the bucket exists because ListObjects() does that for us
8888

8989
// all files under this prefix are headless log files, named after their respective taskId
90-
prefix := ls.s.InstanceObject(req.WorkspaceId, req.InstanceId, logs.UploadedHeadlessLogPathPrefix)
90+
prefix := ls.s.InstanceObject(req.OwnerId, req.WorkspaceId, req.InstanceId, logs.UploadedHeadlessLogPathPrefix)
9191
objects, err := da.ListObjects(ctx, prefix)
9292
if err != nil {
9393
return nil, err

components/content-service/pkg/service/headless-log-service_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestListLogs(t *testing.T) {
7070
daFactory: daFactory,
7171
}
7272

73-
s.EXPECT().InstanceObject(gomock.Any(), gomock.Any(), gomock.Any()).
73+
s.EXPECT().InstanceObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
7474
Return("")
7575
da.EXPECT().Init(gomock.Any(), gomock.Eq(OwnerId), gomock.Eq(WorkspaceId), gomock.Not(gomock.Eq(""))).
7676
Times(1)

components/content-service/pkg/service/workspace-service.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (cs *WorkspaceService) WorkspaceDownloadURL(ctx context.Context, req *api.W
4444
span.SetTag("workspaceId", req.WorkspaceId)
4545
defer tracing.FinishSpan(span, &err)
4646

47-
blobName := cs.s.BackupObject(req.WorkspaceId, storage.DefaultBackup)
47+
blobName := cs.s.BackupObject(req.OwnerId, req.WorkspaceId, storage.DefaultBackup)
4848

4949
info, err := cs.s.SignDownload(ctx, cs.s.Bucket(req.OwnerId), blobName, &storage.SignedURLOptions{})
5050
if err != nil {
@@ -73,7 +73,7 @@ func (cs *WorkspaceService) DeleteWorkspace(ctx context.Context, req *api.Delete
7373
defer tracing.FinishSpan(span, &err)
7474

7575
if req.IncludeSnapshots {
76-
prefix := cs.s.BackupObject(req.WorkspaceId, "")
76+
prefix := cs.s.BackupObject(req.OwnerId, req.WorkspaceId, "")
7777
if !strings.HasSuffix(prefix, "/") {
7878
prefix = prefix + "/"
7979
}
@@ -89,7 +89,7 @@ func (cs *WorkspaceService) DeleteWorkspace(ctx context.Context, req *api.Delete
8989
return &api.DeleteWorkspaceResponse{}, nil
9090
}
9191

92-
blobName := cs.s.BackupObject(req.WorkspaceId, storage.DefaultBackup)
92+
blobName := cs.s.BackupObject(req.OwnerId, req.WorkspaceId, storage.DefaultBackup)
9393
err = cs.s.DeleteObject(ctx, cs.s.Bucket(req.OwnerId), &storage.DeleteObjectQuery{Name: blobName})
9494
if err != nil {
9595
if errors.Is(err, storage.ErrNotFound) {
@@ -100,7 +100,7 @@ func (cs *WorkspaceService) DeleteWorkspace(ctx context.Context, req *api.Delete
100100
return nil, status.Error(codes.Unknown, err.Error())
101101
}
102102

103-
trailPrefix := cs.s.BackupObject(req.WorkspaceId, "trail-")
103+
trailPrefix := cs.s.BackupObject(req.OwnerId, req.WorkspaceId, "trail-")
104104
err = cs.s.DeleteObject(ctx, cs.s.Bucket(req.OwnerId), &storage.DeleteObjectQuery{Prefix: trailPrefix})
105105
if err != nil {
106106
if errors.Is(err, storage.ErrNotFound) {
@@ -121,7 +121,7 @@ func (cs *WorkspaceService) WorkspaceSnapshotExists(ctx context.Context, req *ap
121121
span.SetTag("filename", req.Filename)
122122
defer tracing.FinishSpan(span, &err)
123123

124-
exists, err := cs.s.ObjectExists(ctx, cs.s.Bucket(req.OwnerId), cs.s.BackupObject(req.WorkspaceId, req.Filename))
124+
exists, err := cs.s.ObjectExists(ctx, cs.s.Bucket(req.OwnerId), cs.s.BackupObject(req.OwnerId, req.WorkspaceId, req.Filename))
125125
if err != nil {
126126
return nil, status.Error(codes.Unknown, err.Error())
127127
}

components/content-service/pkg/storage/gcloud.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -870,11 +870,11 @@ func (p *PresignedGCPStorage) ObjectExists(ctx context.Context, bucket, obj stri
870870
}
871871

872872
// BackupObject returns a backup's object name that a direct downloader would download
873-
func (p *PresignedGCPStorage) BackupObject(workspaceID string, name string) string {
873+
func (p *PresignedGCPStorage) BackupObject(ownerID string, workspaceID string, name string) string {
874874
return fmt.Sprintf("workspaces/%s", gcpWorkspaceBackupObjectName(workspaceID, name))
875875
}
876876

877877
// InstanceObject returns a instance's object name that a direct downloader would download
878-
func (p *PresignedGCPStorage) InstanceObject(workspaceID string, instanceID string, name string) string {
879-
return p.BackupObject(workspaceID, InstanceObjectName(instanceID, name))
878+
func (p *PresignedGCPStorage) InstanceObject(ownerID string, workspaceID string, instanceID string, name string) string {
879+
return p.BackupObject(ownerID, workspaceID, InstanceObjectName(instanceID, name))
880880
}

components/content-service/pkg/storage/minio.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,11 @@ func (rs *DirectMinIOStorage) bucketName() string {
339339
}
340340

341341
func (rs *DirectMinIOStorage) objectName(name string) string {
342-
return minioWorkspaceBackupObjectName(rs.Username, rs.WorkspaceName, name)
342+
var username string
343+
if rs.MinIOConfig.BucketName != "" {
344+
username = rs.Username
345+
}
346+
return minioWorkspaceBackupObjectName(username, rs.WorkspaceName, name)
343347
}
344348

345349
func newPresignedMinIOAccess(cfg config.MinIOConfig) (*presignedMinIOStorage, error) {
@@ -532,13 +536,17 @@ func (s *presignedMinIOStorage) BlobObject(name string) (string, error) {
532536
}
533537

534538
// BackupObject returns a backup's object name that a direct downloader would download
535-
func (s *presignedMinIOStorage) BackupObject(workspaceID, name string) string {
536-
return minioWorkspaceBackupObjectName("", workspaceID, name)
539+
func (s *presignedMinIOStorage) BackupObject(ownerID string, workspaceID, name string) string {
540+
var username string
541+
if s.MinIOConfig.BucketName != "" {
542+
username = ownerID
543+
}
544+
return minioWorkspaceBackupObjectName(username, workspaceID, name)
537545
}
538546

539547
// InstanceObject returns a instance's object name that a direct downloader would download
540-
func (s *presignedMinIOStorage) InstanceObject(workspaceID string, instanceID string, name string) string {
541-
return s.BackupObject(workspaceID, InstanceObjectName(instanceID, name))
548+
func (s *presignedMinIOStorage) InstanceObject(ownerID string, workspaceID string, instanceID string, name string) string {
549+
return s.BackupObject(ownerID, workspaceID, InstanceObjectName(instanceID, name))
542550
}
543551

544552
func translateMinioError(err error) error {

components/content-service/pkg/storage/mock/mock.go

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/content-service/pkg/storage/noop.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,11 @@ func (p *PresignedNoopStorage) ObjectExists(ctx context.Context, bucket, obj str
121121
}
122122

123123
// BackupObject returns a backup's object name that a direct downloader would download
124-
func (*PresignedNoopStorage) BackupObject(workspaceID string, name string) string {
124+
func (*PresignedNoopStorage) BackupObject(ownerID string, workspaceID string, name string) string {
125125
return ""
126126
}
127127

128128
// InstanceObject returns a instance's object name that a direct downloader would download
129-
func (*PresignedNoopStorage) InstanceObject(workspaceID string, instanceID string, name string) string {
129+
func (*PresignedNoopStorage) InstanceObject(ownerID string, workspaceID string, instanceID string, name string) string {
130130
return ""
131131
}

components/content-service/pkg/storage/storage.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,10 @@ type PresignedAccess interface {
8989
ObjectExists(ctx context.Context, bucket string, path string) (bool, error)
9090

9191
// BackupObject returns a backup's object name that a direct downloader would download
92-
BackupObject(workspaceID string, name string) string
92+
BackupObject(ownerID string, workspaceID string, name string) string
9393

9494
// InstanceObject returns a instance's object name that a direct downloader would download
95-
InstanceObject(workspaceID string, instanceID string, name string) string
95+
InstanceObject(ownerID string, workspaceID string, instanceID string, name string) string
9696
}
9797

9898
// ObjectMeta describtes the metadata of a remote object

0 commit comments

Comments
 (0)