mirror of
https://github.com/octoleo/restic.git
synced 2024-11-26 14:56:29 +00:00
Add extraObsolete to MasterIndex.Save
This commit is contained in:
parent
5898cb341f
commit
1ec628ddf5
@ -498,7 +498,7 @@ func prune(opts PruneOptions, gopts GlobalOptions, repo restic.Repository, usedB
|
|||||||
if len(removePacks) != 0 {
|
if len(removePacks) != 0 {
|
||||||
totalpacks := int(stats.packs.used+stats.packs.partlyUsed+stats.packs.unused) -
|
totalpacks := int(stats.packs.used+stats.packs.partlyUsed+stats.packs.unused) -
|
||||||
len(removePacks) + packsAddedByRepack
|
len(removePacks) + packsAddedByRepack
|
||||||
err = rebuildIndexFiles(gopts, repo, removePacks, uint64(totalpacks))
|
err = rebuildIndexFiles(gopts, repo, removePacks, nil, uint64(totalpacks))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -511,12 +511,12 @@ func prune(opts PruneOptions, gopts GlobalOptions, repo restic.Repository, usedB
|
|||||||
return nil
|
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")
|
Verbosef("rebuilding index\n")
|
||||||
|
|
||||||
bar := newProgressMax(!gopts.Quiet, packcount, "packs processed")
|
bar := newProgressMax(!gopts.Quiet, packcount, "packs processed")
|
||||||
obsoleteIndexes, err := (repo.Index()).(*repository.MasterIndex).
|
obsoleteIndexes, err := (repo.Index()).(*repository.MasterIndex).
|
||||||
Save(gopts.ctx, repo, removePacks, bar)
|
Save(gopts.ctx, repo, removePacks, extraObsolete, bar)
|
||||||
bar.Done()
|
bar.Done()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -266,7 +266,7 @@ func (mi *MasterIndex) MergeFinalIndexes() {
|
|||||||
// of all known indexes in the "supersedes" field. The IDs are also returned in
|
// of all known indexes in the "supersedes" field. The IDs are also returned in
|
||||||
// the IDSet obsolete
|
// the IDSet obsolete
|
||||||
// After calling this function, you should remove the obsolete index files.
|
// 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()
|
mi.idxMutex.Lock()
|
||||||
defer mi.idxMutex.Unlock()
|
defer mi.idxMutex.Unlock()
|
||||||
|
|
||||||
@ -275,15 +275,6 @@ func (mi *MasterIndex) Save(ctx context.Context, repo restic.Repository, packBla
|
|||||||
newIndex := NewIndex()
|
newIndex := NewIndex()
|
||||||
obsolete = restic.NewIDSet()
|
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 {
|
for i, idx := range mi.idx {
|
||||||
if idx.Final() {
|
if idx.Final() {
|
||||||
ids, err := idx.IDs()
|
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)
|
newIndex.StorePack(pbs.packID, pbs.blobs)
|
||||||
p.Add(1)
|
p.Add(1)
|
||||||
if IndexFull(newIndex) {
|
if IndexFull(newIndex) {
|
||||||
if err := finalize(); err != nil {
|
newIndex.Finalize()
|
||||||
|
if _, err := SaveIndex(ctx, repo, newIndex); err != nil {
|
||||||
return nil, err
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,7 +346,7 @@ func TestIndexSave(t *testing.T) {
|
|||||||
|
|
||||||
repo.LoadIndex(context.TODO())
|
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 {
|
if err != nil {
|
||||||
t.Fatalf("unable to save new index: %v", err)
|
t.Fatalf("unable to save new index: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -193,7 +193,7 @@ func rebuildIndex(t *testing.T, repo restic.Repository) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_, err = (repo.Index()).(*repository.MasterIndex).
|
_, err = (repo.Index()).(*repository.MasterIndex).
|
||||||
Save(context.TODO(), repo, restic.NewIDSet(), nil)
|
Save(context.TODO(), repo, restic.NewIDSet(), nil, nil)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user