refactor: Introduce config struct for operations

This commit is contained in:
Felicitas Pojtinger
2021-12-15 01:33:01 +01:00
parent 1ea34eb02a
commit 479def3d80
12 changed files with 138 additions and 155 deletions

View File

@@ -37,13 +37,13 @@ func (o *Operations) Archive(
o.diskOperationLock.Lock()
defer o.diskOperationLock.Unlock()
writer, err := o.getWriter()
writer, err := o.backend.GetWriter()
if err != nil {
return []*tar.Header{}, err
}
dirty := false
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.recordSize)
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.pipes.RecordSize)
if err != nil {
return []*tar.Header{}, err
}
@@ -51,7 +51,7 @@ func (o *Operations) Archive(
lastIndexedRecord := int64(0)
lastIndexedBlock := int64(0)
if !overwrite {
lastIndexedRecord, lastIndexedBlock, err = o.metadataPersister.GetLastIndexedRecordAndBlock(context.Background(), o.recordSize)
lastIndexedRecord, lastIndexedBlock, err = o.metadata.Metadata.GetLastIndexedRecordAndBlock(context.Background(), o.pipes.RecordSize)
if err != nil {
return []*tar.Header{}, err
}
@@ -103,7 +103,7 @@ func (o *Operations) Archive(
o.pipes.Compression,
compressionLevel,
writer.DriveIsRegular,
o.recordSize,
o.pipes.RecordSize,
)
if err != nil {
return err
@@ -124,7 +124,7 @@ func (o *Operations) Archive(
return err
}
} else {
buf := make([]byte, mtio.BlockSize*o.recordSize)
buf := make([]byte, mtio.BlockSize*o.pipes.RecordSize)
if _, err := io.CopyBuffer(compressor, signer, buf); err != nil {
return err
}
@@ -207,7 +207,7 @@ func (o *Operations) Archive(
o.pipes.Compression,
compressionLevel,
writer.DriveIsRegular,
o.recordSize,
o.pipes.RecordSize,
)
if err != nil {
return err
@@ -223,7 +223,7 @@ func (o *Operations) Archive(
return err
}
} else {
buf := make([]byte, mtio.BlockSize*o.recordSize)
buf := make([]byte, mtio.BlockSize*o.pipes.RecordSize)
if _, err := io.CopyBuffer(compressor, file, buf); err != nil {
return err
}
@@ -259,32 +259,30 @@ func (o *Operations) Archive(
index = 0 // If we are starting fresh, index from start
}
if err := o.closeWriter(); err != nil {
if err := o.backend.CloseWriter(); err != nil {
return []*tar.Header{}, err
}
reader, err := o.getReader()
reader, err := o.backend.GetReader()
if err != nil {
return []*tar.Header{}, err
}
defer o.closeReader()
defer o.backend.CloseReader()
drive, err := o.getDrive()
drive, err := o.backend.GetDrive()
if err != nil {
return []*tar.Header{}, err
}
defer o.closeDrive()
defer o.backend.CloseDrive()
return hdrs, recovery.Index(
reader,
drive,
config.MetadataConfig{
Metadata: o.metadataPersister,
},
o.metadata,
o.pipes,
o.crypto,
o.recordSize,
o.pipes.RecordSize,
int(lastIndexedRecord),
int(lastIndexedBlock),
overwrite,

View File

@@ -18,24 +18,24 @@ func (o *Operations) Delete(name string) error {
o.diskOperationLock.Lock()
defer o.diskOperationLock.Unlock()
writer, err := o.getWriter()
writer, err := o.backend.GetWriter()
if err != nil {
return err
}
dirty := false
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.recordSize)
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.pipes.RecordSize)
if err != nil {
return err
}
lastIndexedRecord, lastIndexedBlock, err := o.metadataPersister.GetLastIndexedRecordAndBlock(context.Background(), o.recordSize)
lastIndexedRecord, lastIndexedBlock, err := o.metadata.Metadata.GetLastIndexedRecordAndBlock(context.Background(), o.pipes.RecordSize)
if err != nil {
return err
}
headersToDelete := []*models.Header{}
dbhdr, err := o.metadataPersister.GetHeader(context.Background(), name)
dbhdr, err := o.metadata.Metadata.GetHeader(context.Background(), name)
if err != nil {
return err
}
@@ -43,7 +43,7 @@ func (o *Operations) Delete(name string) error {
// If the header refers to a directory, get it's children
if dbhdr.Typeflag == tar.TypeDir {
dbhdrs, err := o.metadataPersister.GetHeaderChildren(context.Background(), name)
dbhdrs, err := o.metadata.Metadata.GetHeaderChildren(context.Background(), name)
if err != nil {
return err
}
@@ -93,32 +93,30 @@ func (o *Operations) Delete(name string) error {
return err
}
if err := o.closeWriter(); err != nil {
if err := o.backend.CloseWriter(); err != nil {
return err
}
reader, err := o.getReader()
reader, err := o.backend.GetReader()
if err != nil {
return err
}
defer o.closeReader()
defer o.backend.CloseReader()
drive, err := o.getDrive()
drive, err := o.backend.GetDrive()
if err != nil {
return err
}
defer o.closeDrive()
defer o.backend.CloseDrive()
return recovery.Index(
reader,
drive,
config.MetadataConfig{
Metadata: o.metadataPersister,
},
o.metadata,
o.pipes,
o.crypto,
o.recordSize,
o.pipes.RecordSize,
int(lastIndexedRecord),
int(lastIndexedBlock),
false,

View File

@@ -19,24 +19,24 @@ func (o *Operations) Move(from string, to string) error {
o.diskOperationLock.Lock()
defer o.diskOperationLock.Unlock()
writer, err := o.getWriter()
writer, err := o.backend.GetWriter()
if err != nil {
return err
}
dirty := false
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.recordSize)
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.pipes.RecordSize)
if err != nil {
return err
}
lastIndexedRecord, lastIndexedBlock, err := o.metadataPersister.GetLastIndexedRecordAndBlock(context.Background(), o.recordSize)
lastIndexedRecord, lastIndexedBlock, err := o.metadata.Metadata.GetLastIndexedRecordAndBlock(context.Background(), o.pipes.RecordSize)
if err != nil {
return err
}
headersToMove := []*models.Header{}
dbhdr, err := o.metadataPersister.GetHeader(context.Background(), from)
dbhdr, err := o.metadata.Metadata.GetHeader(context.Background(), from)
if err != nil {
return err
}
@@ -44,7 +44,7 @@ func (o *Operations) Move(from string, to string) error {
// If the header refers to a directory, get it's children
if dbhdr.Typeflag == tar.TypeDir {
dbhdrs, err := o.metadataPersister.GetHeaderChildren(context.Background(), from)
dbhdrs, err := o.metadata.Metadata.GetHeaderChildren(context.Background(), from)
if err != nil {
return err
}
@@ -96,32 +96,30 @@ func (o *Operations) Move(from string, to string) error {
return err
}
if err := o.closeWriter(); err != nil {
if err := o.backend.CloseWriter(); err != nil {
return err
}
reader, err := o.getReader()
reader, err := o.backend.GetReader()
if err != nil {
return err
}
defer o.closeReader()
defer o.backend.CloseReader()
drive, err := o.getDrive()
drive, err := o.backend.GetDrive()
if err != nil {
return err
}
defer o.closeDrive()
defer o.backend.CloseDrive()
return recovery.Index(
reader,
drive,
config.MetadataConfig{
Metadata: o.metadataPersister,
},
o.metadata,
o.pipes,
o.crypto,
o.recordSize,
o.pipes.RecordSize,
int(lastIndexedRecord),
int(lastIndexedBlock),
false,

View File

@@ -4,68 +4,37 @@ import (
"sync"
models "github.com/pojntfx/stfs/internal/db/sqlite/models/metadata"
"github.com/pojntfx/stfs/internal/persisters"
"github.com/pojntfx/stfs/pkg/config"
)
type Operations struct {
getWriter func() (config.DriveWriterConfig, error)
closeWriter func() error
getReader func() (config.DriveReaderConfig, error)
closeReader func() error
getDrive func() (config.DriveConfig, error)
closeDrive func() error
metadataPersister *persisters.MetadataPersister
backend config.BackendConfig
metadata config.MetadataConfig
pipes config.PipeConfig
crypto config.CryptoConfig
recordSize int
onHeader func(hdr *models.Header)
diskOperationLock sync.Mutex
}
func NewOperations(
getWriter func() (config.DriveWriterConfig, error),
closeWriter func() error,
getReader func() (config.DriveReaderConfig, error),
closeReader func() error,
getDrive func() (config.DriveConfig, error),
closeDrive func() error,
metadataPersister *persisters.MetadataPersister,
backend config.BackendConfig,
metadata config.MetadataConfig,
pipes config.PipeConfig,
crypto config.CryptoConfig,
recordSize int,
onHeader func(hdr *models.Header),
) *Operations {
return &Operations{
getWriter: getWriter,
closeWriter: closeWriter,
getReader: getReader,
closeReader: closeReader,
getDrive: getDrive,
closeDrive: closeDrive,
metadataPersister: metadataPersister,
backend: backend,
metadata: metadata,
pipes: pipes,
crypto: crypto,
recordSize: recordSize,
onHeader: onHeader,
}
}

View File

@@ -18,12 +18,12 @@ func (o *Operations) Restore(from string, to string, flatten bool) error {
headersToRestore := []*models.Header{}
src := strings.TrimSuffix(from, "/")
dbhdr, err := o.metadataPersister.GetHeader(context.Background(), src)
dbhdr, err := o.metadata.Metadata.GetHeader(context.Background(), src)
if err != nil {
if err == sql.ErrNoRows {
src = src + "/"
dbhdr, err = o.metadataPersister.GetHeader(context.Background(), src)
dbhdr, err = o.metadata.Metadata.GetHeader(context.Background(), src)
if err != nil {
return err
}
@@ -35,7 +35,7 @@ func (o *Operations) Restore(from string, to string, flatten bool) error {
// If the header refers to a directory, get it's children
if dbhdr.Typeflag == tar.TypeDir {
dbhdrs, err := o.metadataPersister.GetHeaderChildren(context.Background(), src)
dbhdrs, err := o.metadata.Metadata.GetHeaderChildren(context.Background(), src)
if err != nil {
return err
}
@@ -43,17 +43,17 @@ func (o *Operations) Restore(from string, to string, flatten bool) error {
headersToRestore = append(headersToRestore, dbhdrs...)
}
reader, err := o.getReader()
reader, err := o.backend.GetReader()
if err != nil {
return err
}
defer o.closeReader()
defer o.backend.CloseReader()
drive, err := o.getDrive()
drive, err := o.backend.GetDrive()
if err != nil {
return err
}
defer o.closeDrive()
defer o.backend.CloseDrive()
for _, dbhdr := range headersToRestore {
if o.onHeader != nil {
@@ -79,7 +79,7 @@ func (o *Operations) Restore(from string, to string, flatten bool) error {
o.pipes,
o.crypto,
o.recordSize,
o.pipes.RecordSize,
int(dbhdr.Record),
int(dbhdr.Block),
dst,

View File

@@ -31,18 +31,18 @@ func (o *Operations) Update(
o.diskOperationLock.Lock()
defer o.diskOperationLock.Unlock()
writer, err := o.getWriter()
writer, err := o.backend.GetWriter()
if err != nil {
return []*tar.Header{}, err
}
dirty := false
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.recordSize)
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, o.pipes.RecordSize)
if err != nil {
return []*tar.Header{}, err
}
lastIndexedRecord, lastIndexedBlock, err := o.metadataPersister.GetLastIndexedRecordAndBlock(context.Background(), o.recordSize)
lastIndexedRecord, lastIndexedBlock, err := o.metadata.Metadata.GetLastIndexedRecordAndBlock(context.Background(), o.pipes.RecordSize)
if err != nil {
return []*tar.Header{}, err
}
@@ -93,7 +93,7 @@ func (o *Operations) Update(
o.pipes.Compression,
compressionLevel,
writer.DriveIsRegular,
o.recordSize,
o.pipes.RecordSize,
)
if err != nil {
return err
@@ -114,7 +114,7 @@ func (o *Operations) Update(
return err
}
} else {
buf := make([]byte, mtio.BlockSize*o.recordSize)
buf := make([]byte, mtio.BlockSize*o.pipes.RecordSize)
if _, err := io.CopyBuffer(compressor, signer, buf); err != nil {
return err
}
@@ -198,7 +198,7 @@ func (o *Operations) Update(
o.pipes.Compression,
compressionLevel,
writer.DriveIsRegular,
o.recordSize,
o.pipes.RecordSize,
)
if err != nil {
return err
@@ -214,7 +214,7 @@ func (o *Operations) Update(
return err
}
} else {
buf := make([]byte, mtio.BlockSize*o.recordSize)
buf := make([]byte, mtio.BlockSize*o.pipes.RecordSize)
if _, err := io.CopyBuffer(compressor, file, buf); err != nil {
return err
}
@@ -274,32 +274,30 @@ func (o *Operations) Update(
return []*tar.Header{}, err
}
if err := o.closeWriter(); err != nil {
if err := o.backend.CloseWriter(); err != nil {
return []*tar.Header{}, err
}
reader, err := o.getReader()
reader, err := o.backend.GetReader()
if err != nil {
return []*tar.Header{}, err
}
defer o.closeReader()
defer o.backend.CloseReader()
drive, err := o.getDrive()
drive, err := o.backend.GetDrive()
if err != nil {
return []*tar.Header{}, err
}
defer o.closeDrive()
defer o.backend.CloseDrive()
return hdrs, recovery.Index(
reader,
drive,
config.MetadataConfig{
Metadata: o.metadataPersister,
},
o.metadata,
o.pipes,
o.crypto,
o.recordSize,
o.pipes.RecordSize,
int(lastIndexedRecord),
int(lastIndexedBlock),
false,