Add extraObsolete to MasterIndex.Save

This commit is contained in:
Alexander Weiss 2020-10-18 09:24:34 +02:00
parent 5898cb341f
commit 1ec628ddf5
4 changed files with 18 additions and 17 deletions

View file

@ -498,7 +498,7 @@ func prune(opts PruneOptions, gopts GlobalOptions, repo restic.Repository, usedB
if len(removePacks) != 0 {
totalpacks := int(stats.packs.used+stats.packs.partlyUsed+stats.packs.unused) -
len(removePacks) + packsAddedByRepack
err = rebuildIndexFiles(gopts, repo, removePacks, uint64(totalpacks))
err = rebuildIndexFiles(gopts, repo, removePacks, nil, uint64(totalpacks))
if err != nil {
return err
}
@ -511,12 +511,12 @@ func prune(opts PruneOptions, gopts GlobalOptions, repo restic.Repository, usedB
return nil
}
func rebuildIndexFiles(gopts GlobalOptions, repo restic.Repository, removePacks restic.IDSet, packcount uint64) error {
func rebuildIndexFiles(gopts GlobalOptions, repo restic.Repository, removePacks restic.IDSet, extraObsolete restic.IDs, packcount uint64) error {
Verbosef("rebuilding index\n")
bar := newProgressMax(!gopts.Quiet, packcount, "packs processed")
obsoleteIndexes, err := (repo.Index()).(*repository.MasterIndex).
Save(gopts.ctx, repo, removePacks, bar)
Save(gopts.ctx, repo, removePacks, extraObsolete, bar)
bar.Done()
if err != nil {
return err

View file

@ -266,7 +266,7 @@ func (mi *MasterIndex) MergeFinalIndexes() {
// of all known indexes in the "supersedes" field. The IDs are also returned in
// the IDSet obsolete
// After calling this function, you should remove the obsolete index files.
func (mi *MasterIndex) Save(ctx context.Context, repo restic.Repository, packBlacklist restic.IDSet, p *progress.Counter) (obsolete restic.IDSet, err error) {
func (mi *MasterIndex) Save(ctx context.Context, repo restic.Repository, packBlacklist restic.IDSet, extraObsolete restic.IDs, p *progress.Counter) (obsolete restic.IDSet, err error) {
mi.idxMutex.Lock()
defer mi.idxMutex.Unlock()
@ -275,15 +275,6 @@ func (mi *MasterIndex) Save(ctx context.Context, repo restic.Repository, packBla
newIndex := NewIndex()
obsolete = restic.NewIDSet()
finalize := func() error {
newIndex.Finalize()
if _, err := SaveIndex(ctx, repo, newIndex); err != nil {
return err
}
newIndex = NewIndex()
return nil
}
for i, idx := range mi.idx {
if idx.Final() {
ids, err := idx.IDs()
@ -309,13 +300,23 @@ func (mi *MasterIndex) Save(ctx context.Context, repo restic.Repository, packBla
newIndex.StorePack(pbs.packID, pbs.blobs)
p.Add(1)
if IndexFull(newIndex) {
if err := finalize(); err != nil {
newIndex.Finalize()
if _, err := SaveIndex(ctx, repo, newIndex); err != nil {
return nil, err
}
newIndex = NewIndex()
}
}
}
if err := finalize(); err != nil {
err = newIndex.AddToSupersedes(extraObsolete...)
if err != nil {
return nil, err
}
obsolete.Merge(restic.NewIDSet(extraObsolete...))
newIndex.Finalize()
if _, err := SaveIndex(ctx, repo, newIndex); err != nil {
return nil, err
}

View file

@ -346,7 +346,7 @@ func TestIndexSave(t *testing.T) {
repo.LoadIndex(context.TODO())
obsoletes, err := repo.Index().(*repository.MasterIndex).Save(context.TODO(), repo, nil, nil)
obsoletes, err := repo.Index().(*repository.MasterIndex).Save(context.TODO(), repo, nil, nil, nil)
if err != nil {
t.Fatalf("unable to save new index: %v", err)
}

View file

@ -193,7 +193,7 @@ func rebuildIndex(t *testing.T, repo restic.Repository) {
}
_, err = (repo.Index()).(*repository.MasterIndex).
Save(context.TODO(), repo, restic.NewIDSet(), nil)
Save(context.TODO(), repo, restic.NewIDSet(), nil, nil)
if err != nil {
t.Fatal(err)