feat: Enable indexing with tape as single source of truth after deletions

This commit is contained in:
Felicitas Pojtinger
2021-11-21 19:58:02 +01:00
parent a33c4cb588
commit d4c4eb41ef
5 changed files with 97 additions and 55 deletions

View File

@@ -4,10 +4,8 @@ package persisters
//go:generate go-bindata -pkg metadata -o ../db/sqlite/migrations/metadata/migrations.go ../../../db/sqlite/migrations/metadata
import (
"archive/tar"
"context"
"database/sql"
"encoding/json"
"github.com/pojntfx/stfs/pkg/db/sqlite/migrations/metadata"
models "github.com/pojntfx/stfs/pkg/db/sqlite/models/metadata"
@@ -32,33 +30,7 @@ func NewMetadataPersister(dbPath string) *MetadataPersister {
}
}
func (p *MetadataPersister) UpsertHeader(ctx context.Context, record, block int64, hdr *tar.Header) error {
paxRecords, err := json.Marshal(hdr.PAXRecords)
if err != nil {
return err
}
dbhdr := models.Header{
Record: record,
Block: block,
Typeflag: int64(hdr.Typeflag),
Name: hdr.Name,
Linkname: hdr.Linkname,
Size: hdr.Size,
Mode: hdr.Mode,
UID: int64(hdr.Uid),
Gid: int64(hdr.Gid),
Uname: hdr.Uname,
Gname: hdr.Gname,
Modtime: hdr.ModTime,
Accesstime: hdr.AccessTime,
Changetime: hdr.ChangeTime,
Devmajor: hdr.Devmajor,
Devminor: hdr.Devminor,
Paxrecords: string(paxRecords),
Format: int64(hdr.Format),
}
func (p *MetadataPersister) UpsertHeader(ctx context.Context, dbhdr *models.Header) error {
if _, err := models.FindHeader(ctx, p.db, dbhdr.Name, models.HeaderColumns.Name); err != nil {
if err == sql.ErrNoRows {
if err := dbhdr.Insert(ctx, p.db, boil.Infer()); err != nil {
@@ -82,9 +54,13 @@ func (p *MetadataPersister) GetHeaders(ctx context.Context) (models.HeaderSlice,
return models.Headers().All(ctx, p.db)
}
func (p *MetadataPersister) DeleteHeader(ctx context.Context, name string) (*models.Header, error) {
func (p *MetadataPersister) DeleteHeader(ctx context.Context, name string, ignoreNotExists bool) (*models.Header, error) {
hdr, err := models.FindHeader(ctx, p.db, name)
if err != nil {
if err == sql.ErrNoRows && ignoreNotExists {
return nil, nil
}
return nil, err
}