Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelogs/unreleased/9724-Lyndon-Li
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix issue #9723, extend Unified Repo Interface to support block uploader
38 changes: 32 additions & 6 deletions pkg/repository/udmrepo/kopialib/lib_repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -388,9 +388,9 @@ func (kr *kopiaRepository) Close(ctx context.Context) error {
return nil
}

func (kr *kopiaRepository) NewObjectWriter(ctx context.Context, opt udmrepo.ObjectWriteOptions) udmrepo.ObjectWriter {
func (kr *kopiaRepository) NewObjectWriter(ctx context.Context, opt udmrepo.ObjectWriteOptions) (udmrepo.ObjectWriter, error) {
if kr.rawWriter == nil {
return nil
return nil, errors.New("repo writer is closed or not open")
}

writer := kr.rawWriter.NewObjectWriter(kopia.SetupKopiaLog(ctx, kr.logger), object.WriterOptions{
Expand All @@ -402,12 +402,22 @@ func (kr *kopiaRepository) NewObjectWriter(ctx context.Context, opt udmrepo.Obje
})

if writer == nil {
return nil
return nil, errors.Errorf("error creating writer for object %s", opt.Description)
}

return &kopiaObjectWriter{
rawWriter: writer,
}
}, nil
}

// TODO add implementation in following PRs
func (kr *kopiaRepository) WriteMetadata(ctx context.Context, meta *udmrepo.Metadata, opt udmrepo.ObjectWriteOptions) (udmrepo.ID, error) {
return "", errors.New("not supported")
}

// TODO add implementation in following PRs
func (kr *kopiaRepository) ReadMetadata(ctx context.Context, id udmrepo.ID) (*udmrepo.Metadata, error) {
return nil, errors.New("not supported")
}

func (kr *kopiaRepository) PutManifest(ctx context.Context, manifest udmrepo.RepoManifest) (udmrepo.ID, error) {
Expand Down Expand Up @@ -436,6 +446,21 @@ func (kr *kopiaRepository) DeleteManifest(ctx context.Context, id udmrepo.ID) er
return nil
}

// TODO add implementation in following PRs
func (kr *kopiaRepository) SaveSnapshot(ctx context.Context, snap udmrepo.Snapshot) (udmrepo.ID, error) {
return "", errors.New("not supported")
}

// TODO add implementation in following PRs
func (kr *kopiaRepository) GetSnapshot(ctx context.Context, id udmrepo.ID) (udmrepo.Snapshot, error) {
return udmrepo.Snapshot{}, errors.New("not supported")
}

// TODO add implementation in following PRs
func (kr *kopiaRepository) DeleteSnapshot(ctx context.Context, id udmrepo.ID) error {
return errors.New("not supported")
}

func (kr *kopiaRepository) Flush(ctx context.Context) error {
if kr.rawWriter == nil {
return errors.New("repo writer is closed or not open")
Expand Down Expand Up @@ -546,8 +571,9 @@ func (kow *kopiaObjectWriter) Write(p []byte) (int, error) {
return kow.rawWriter.Write(p)
}

func (kow *kopiaObjectWriter) Seek(offset int64, whence int) (int64, error) {
return -1, errors.New("not supported")
// TODO add implementation in following PRs
func (kow *kopiaObjectWriter) WriteAt(p []byte, offset int64) (int, error) {
return 0, errors.New("not supported")
}

func (kow *kopiaObjectWriter) Checkpoint() (udmrepo.ID, error) {
Expand Down
18 changes: 13 additions & 5 deletions pkg/repository/udmrepo/kopialib/lib_repo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -663,13 +663,16 @@ func TestNewObjectWriter(t *testing.T) {
rawWriter *repomocks.MockRepositoryWriter
rawWriterRet object.Writer
expectedRet udmrepo.ObjectWriter
expectedErr string
}{
{
name: "raw writer is nil",
name: "raw writer is nil",
expectedErr: "repo writer is closed or not open",
},
{
name: "new object writer fail",
rawWriter: repomocks.NewMockRepositoryWriter(t),
name: "new object writer fail",
rawWriter: repomocks.NewMockRepositoryWriter(t),
expectedErr: "error creating writer for object ",
},
{
name: "succeed",
Expand All @@ -688,9 +691,14 @@ func TestNewObjectWriter(t *testing.T) {
kr.rawWriter = tc.rawWriter
}

ret := kr.NewObjectWriter(t.Context(), udmrepo.ObjectWriteOptions{})
ret, err := kr.NewObjectWriter(t.Context(), udmrepo.ObjectWriteOptions{})

assert.Equal(t, tc.expectedRet, ret)
if tc.expectedErr == "" {
require.NoError(t, err)
require.Equal(t, tc.expectedRet, ret)
} else {
require.EqualError(t, err, tc.expectedErr)
}
})
}
}
Expand Down
Loading
Loading