From 596e774582b7c66adef78e6a7e0b6f19ee699f1d Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Fri, 22 May 2026 16:19:36 +0800 Subject: [PATCH] add incremental aware object writer Signed-off-by: Lyndon-Li --- changelogs/unreleased/9845-Lyndon-Li | 1 + pkg/repository/udmrepo/kopialib/lib_repo.go | 11 ++++------- pkg/repository/udmrepo/kopialib/lib_repo_ex_test.go | 10 +++++++++- 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 changelogs/unreleased/9845-Lyndon-Li diff --git a/changelogs/unreleased/9845-Lyndon-Li b/changelogs/unreleased/9845-Lyndon-Li new file mode 100644 index 000000000..6e08e098d --- /dev/null +++ b/changelogs/unreleased/9845-Lyndon-Li @@ -0,0 +1 @@ +Fix issue #9823, add incremental ware object writer for block data mover \ No newline at end of file diff --git a/pkg/repository/udmrepo/kopialib/lib_repo.go b/pkg/repository/udmrepo/kopialib/lib_repo.go index 86e708e11..79610bbbd 100644 --- a/pkg/repository/udmrepo/kopialib/lib_repo.go +++ b/pkg/repository/udmrepo/kopialib/lib_repo.go @@ -22,7 +22,6 @@ import ( "io" "os" "strings" - "sync" "sync/atomic" "time" @@ -84,8 +83,6 @@ type kopiaObjectWriterEx struct { ctx context.Context rawRepoWriter repo.RepositoryWriter parentEntries []object.IndirectObjectEntry - entries []object.IndirectObjectEntry - entryLock sync.Mutex blockSize int64 description string compressor compression.Name @@ -855,12 +852,12 @@ func (kow *kopiaObjectWriter) Close() error { // TODO add implementation in following PRs func (kow *kopiaObjectWriterEx) Write(p []byte) (int, error) { - return 0, nil + return 0, errors.New("not implemented") } // TODO add implementation in following PRs func (kow *kopiaObjectWriterEx) WriteAt(p []byte, offset int64) (int, error) { - return 0, nil + return 0, errors.New("not implemented") } func (kow *kopiaObjectWriterEx) Checkpoint() (udmrepo.ID, error) { @@ -869,12 +866,12 @@ func (kow *kopiaObjectWriterEx) Checkpoint() (udmrepo.ID, error) { // TODO add implementation in following PRs func (kow *kopiaObjectWriterEx) Result() (udmrepo.ID, error) { - return udmrepo.ID(""), nil + return udmrepo.ID(""), errors.New("not implemented") } // TODO add implementation in following PRs func (kow *kopiaObjectWriterEx) Close() error { - return nil + return errors.New("not implemented") } // getCompressorForObject returns the compressor for an object, at present, we don't support compression diff --git a/pkg/repository/udmrepo/kopialib/lib_repo_ex_test.go b/pkg/repository/udmrepo/kopialib/lib_repo_ex_test.go index cd688666a..ec45d1e81 100644 --- a/pkg/repository/udmrepo/kopialib/lib_repo_ex_test.go +++ b/pkg/repository/udmrepo/kopialib/lib_repo_ex_test.go @@ -133,7 +133,7 @@ func TestGetFlattenedEntries(t *testing.T) { kr := &kopiaRepository{logger: velerotest.NewLogger()} rawID := object.ID{} _, err := kr.getFlattenedEntries(context.Background(), rawID) - assert.Error(t, err) + require.Error(t, err) assert.Contains(t, err.Error(), "object is not an indirect object") } @@ -178,6 +178,14 @@ func TestNewObjectWriterEx(t *testing.T) { rawWriter: repomocks.NewMockRepositoryWriter(t), expectedErr: "parent object is only supported for block mode", }, + { + name: "block mode success with async writes", + opt: udmrepo.ObjectWriteOptions{ + AccessMode: udmrepo.ObjectDataAccessModeBlock, + AsyncWrites: 4, + }, + rawWriter: repomocks.NewMockRepositoryWriter(t), + }, } for _, tc := range testCases {