mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-08-03 13:56:07 +00:00
Merge pull request #10105 from Lyndon-Li/optimize-sub-object-description
Optimize sub object description
This commit is contained in:
@@ -19,7 +19,6 @@ package kopialib
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
@@ -913,8 +912,7 @@ func (kow *kopiaObjectWriterEx) Write(p []byte) (int, error) {
|
||||
kow.entryLock.Unlock()
|
||||
|
||||
buffOffset := curPos - offset
|
||||
objName := fmt.Sprintf("%s-b%v", kow.description, entryID)
|
||||
kow.writeObjectAsync(objName, entryID, p[buffOffset:buffOffset+kow.blockSize])
|
||||
kow.writeObjectAsync(entryID, p[buffOffset:buffOffset+kow.blockSize])
|
||||
|
||||
curPos += kow.blockSize
|
||||
}
|
||||
@@ -922,38 +920,38 @@ func (kow *kopiaObjectWriterEx) Write(p []byte) (int, error) {
|
||||
return length, nil
|
||||
}
|
||||
|
||||
func (kow *kopiaObjectWriterEx) writeObject(objName string, p []byte) (object.ID, error) {
|
||||
func (kow *kopiaObjectWriterEx) writeObject(p []byte) (object.ID, error) {
|
||||
writer := kow.rawRepoWriter.NewObjectWriter(kopia.SetupKopiaLog(kow.ctx, kow.logger), object.WriterOptions{
|
||||
Description: objName,
|
||||
Description: kow.description,
|
||||
Compressor: kow.compressor,
|
||||
Splitter: kow.splitter,
|
||||
})
|
||||
|
||||
if writer == nil {
|
||||
return object.EmptyID, errors.Errorf("error opening writer for %s", objName)
|
||||
return object.EmptyID, errors.New("error opening writer")
|
||||
}
|
||||
|
||||
defer writer.Close()
|
||||
|
||||
written, err := writer.Write(p)
|
||||
if err != nil {
|
||||
return object.EmptyID, errors.Wrapf(err, "error writing for %s", objName)
|
||||
return object.EmptyID, errors.Wrap(err, "error writing data")
|
||||
}
|
||||
|
||||
if written != len(p) {
|
||||
return object.EmptyID, errors.Errorf("short write for %s", objName)
|
||||
return object.EmptyID, errors.New("short write")
|
||||
}
|
||||
|
||||
objID, err := writer.Result()
|
||||
if err != nil {
|
||||
return object.EmptyID, errors.Wrapf(err, "error flushing data for %s", objName)
|
||||
return object.EmptyID, errors.Wrap(err, "error flushing data")
|
||||
}
|
||||
|
||||
return objID, nil
|
||||
}
|
||||
|
||||
func (kow *kopiaObjectWriterEx) writeObjectSync(objName string, entry int, p []byte) error {
|
||||
objID, err := kow.writeObject(objName, p)
|
||||
func (kow *kopiaObjectWriterEx) writeObjectSync(entry int, p []byte) error {
|
||||
objID, err := kow.writeObject(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -965,10 +963,10 @@ func (kow *kopiaObjectWriterEx) writeObjectSync(objName string, entry int, p []b
|
||||
return nil
|
||||
}
|
||||
|
||||
func (kow *kopiaObjectWriterEx) writeObjectAsync(objName string, entryID int, p []byte) {
|
||||
func (kow *kopiaObjectWriterEx) writeObjectAsync(entryID int, p []byte) {
|
||||
if kow.asyncWritesSem == nil {
|
||||
if err := kow.writeObjectSync(objName, entryID, p); err != nil {
|
||||
kow.saveWriteError(errors.Wrapf(err, "error writing object for %s", objName))
|
||||
if err := kow.writeObjectSync(entryID, p); err != nil {
|
||||
kow.saveWriteError(errors.Wrapf(err, "error writing object for %s, entry %d", kow.description, entryID))
|
||||
}
|
||||
} else {
|
||||
kow.asyncWritesSem <- struct{}{}
|
||||
@@ -977,8 +975,8 @@ func (kow *kopiaObjectWriterEx) writeObjectAsync(objName string, entryID int, p
|
||||
copy(buffer, p)
|
||||
|
||||
kow.asyncWritesGroup.Go(func() {
|
||||
if err := kow.writeObjectSync(objName, entryID, buffer); err != nil {
|
||||
kow.saveWriteError(errors.Wrapf(err, "error writing object for %s", objName))
|
||||
if err := kow.writeObjectSync(entryID, buffer); err != nil {
|
||||
kow.saveWriteError(errors.Wrapf(err, "error writing object for %s, entry %d", kow.description, entryID))
|
||||
}
|
||||
|
||||
kow.asyncBuffer.Return(buffer)
|
||||
@@ -987,10 +985,10 @@ func (kow *kopiaObjectWriterEx) writeObjectAsync(objName string, entryID int, p
|
||||
}
|
||||
}
|
||||
|
||||
func (kow *kopiaObjectWriterEx) writeZeroObject(objName string, entryID int) error {
|
||||
func (kow *kopiaObjectWriterEx) writeZeroObject(entryID int) error {
|
||||
if kow.zeroObject == object.EmptyID {
|
||||
zeroBuffer := make([]byte, kow.blockSize)
|
||||
objectID, err := kow.writeObject(objName, zeroBuffer)
|
||||
objectID, err := kow.writeObject(zeroBuffer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1071,9 +1069,8 @@ func (kow *kopiaObjectWriterEx) WriteAt(p []byte, offset int64) (int, error) {
|
||||
})
|
||||
kow.entryLock.Unlock()
|
||||
|
||||
objName := fmt.Sprintf("%s-b%v", kow.description, entryID)
|
||||
if err := kow.writeZeroObject(objName, entryID); err != nil {
|
||||
return 0, errors.Wrapf(err, "error writing zero object for %s", objName)
|
||||
if err := kow.writeZeroObject(entryID); err != nil {
|
||||
return 0, errors.Wrapf(err, "error writing zero object for %s, entry %v", kow.description, entryID)
|
||||
}
|
||||
|
||||
curPos += kow.blockSize
|
||||
@@ -1093,8 +1090,7 @@ func (kow *kopiaObjectWriterEx) WriteAt(p []byte, offset int64) (int, error) {
|
||||
kow.entryLock.Unlock()
|
||||
|
||||
buffOffset := curPos - offset
|
||||
objName := fmt.Sprintf("%s-b%v", kow.description, entryID)
|
||||
kow.writeObjectAsync(objName, entryID, p[buffOffset:buffOffset+kow.blockSize])
|
||||
kow.writeObjectAsync(entryID, p[buffOffset:buffOffset+kow.blockSize])
|
||||
|
||||
curPos += kow.blockSize
|
||||
}
|
||||
|
||||
@@ -291,7 +291,7 @@ func TestKopiaObjectWriterEx_Write(t *testing.T) {
|
||||
t.Helper()
|
||||
err := kow.getWriteError()
|
||||
require.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "error opening writer for -b0")
|
||||
assert.Contains(t, err.Error(), "error writing object for , entry 0: error opening writer")
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -936,7 +936,7 @@ func TestKopiaObjectWriterEx_WriteAt(t *testing.T) {
|
||||
},
|
||||
inputData: make([]byte, 1024),
|
||||
offset: 1024,
|
||||
expectedErr: "error writing zero object for -b0: error writing for -b0: simulated zero object write error",
|
||||
expectedErr: "error writing zero object for , entry 0: error writing data: simulated zero object write error",
|
||||
},
|
||||
{
|
||||
name: "writeObject short write",
|
||||
@@ -964,7 +964,7 @@ func TestKopiaObjectWriterEx_WriteAt(t *testing.T) {
|
||||
t.Helper()
|
||||
err := kow.getWriteError()
|
||||
require.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "short write for -b0")
|
||||
assert.Contains(t, err.Error(), "error writing object for , entry 0: short write")
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package block
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"runtime"
|
||||
@@ -89,7 +90,7 @@ func (blkup *blockUploader) Backup(source sourceInfo, parentObject udmrepo.ID, b
|
||||
}
|
||||
|
||||
destObj, err := blkup.repoWriter.NewObjectWriter(blkup.ctx, udmrepo.ObjectWriteOptions{
|
||||
Description: "BDEV:" + getObjectName(source.realSource),
|
||||
Description: fmt.Sprintf("BDEV:%s-%s", getObjectName(source.realSource), snapStart.Format("2006-01-02-15-04-05")),
|
||||
DataType: udmrepo.ObjectDataTypeData,
|
||||
AccessMode: udmrepo.ObjectDataAccessModeBlock,
|
||||
ParentObject: parentObject,
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"context"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -357,7 +358,7 @@ func TestBlockUploaderBackup(t *testing.T) {
|
||||
}
|
||||
|
||||
repoWriter.On("NewObjectWriter", mock.Anything, mock.MatchedBy(func(opt udmrepo.ObjectWriteOptions) bool {
|
||||
return opt.Description == "BDEV:data-volume1" && opt.BackupMode == backupMode
|
||||
return strings.HasPrefix(opt.Description, "BDEV:data-volume1-") && opt.BackupMode == backupMode
|
||||
})).Return(objWriter, tc.createObjErr)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user