feat: Port tape access management to delete cmd

This commit is contained in:
Felicitas Pojtinger
2021-12-14 22:21:09 +01:00
parent 1a16fd2402
commit ca905ef225
2 changed files with 39 additions and 30 deletions

View File

@@ -50,36 +50,24 @@ var deleteCmd = &cobra.Command{
return err
}
writer, writerIsRegular, err := tape.OpenTapeWriteOnly(
tm := tape.NewTapeManager(
viper.GetString(driveFlag),
viper.GetInt(recordSizeFlag),
false,
viper.GetBool(overwriteFlag),
)
if err != nil {
return err
}
defer writer.Close()
reader, readerIsRegular, err := tape.OpenTapeReadOnly(
viper.GetString(driveFlag),
)
if err != nil {
return err
}
defer reader.Close()
return operations.Delete(
config.DriveWriterConfig{
Drive: writer,
DriveIsRegular: writerIsRegular,
},
config.DriveReaderConfig{
Drive: reader,
DriveIsRegular: readerIsRegular,
},
config.DriveConfig{
Drive: reader,
DriveIsRegular: readerIsRegular,
},
ops := operations.NewOperations(
tm.GetWriter,
tm.Close,
tm.GetReader,
tm.Close,
tm.GetDrive,
tm.Close,
)
return ops.Delete(
config.MetadataConfig{
Metadata: viper.GetString(metadataFlag),
},

View File

@@ -15,10 +15,7 @@ import (
"github.com/pojntfx/stfs/pkg/recovery"
)
func Delete(
writer config.DriveWriterConfig,
reader config.DriveReaderConfig,
drive config.DriveConfig,
func (o *Operations) Delete(
metadata config.MetadataConfig,
pipes config.PipeConfig,
crypto config.CryptoConfig,
@@ -28,6 +25,14 @@ func Delete(
onHeader func(hdr *models.Header),
) error {
o.writeLock.Lock()
defer o.writeLock.Unlock()
writer, err := o.getWriter()
if err != nil {
return err
}
dirty := false
tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, recordSize)
if err != nil {
@@ -103,6 +108,22 @@ func Delete(
return err
}
if err := o.closeWriter(); err != nil {
return err
}
reader, err := o.getReader()
if err != nil {
return err
}
defer o.closeReader()
drive, err := o.getDrive()
if err != nil {
return err
}
defer o.closeDrive()
return recovery.Index(
reader,
drive,