From f01c8ad8437c1735e0cd52ee1f8ad925771bcecb Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Tue, 17 Jan 2023 13:51:57 -0800 Subject: [PATCH] Add logging for bases in incremental backups (#2151) ## Description Add log statements noting which bases were used for kopia assisted incrementals and which bases were merged into the hierarchy. Also record the reasons a base was chosen. Log statements when searching for previous snapshots will be added when that code is refactored ## Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No ## Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Test - [ ] :computer: CI/Deployment - [x] :broom: Tech Debt/Cleanup ## Issue(s) * #2149 ## Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/internal/kopia/upload.go | 12 ++++++++++++ src/internal/kopia/wrapper.go | 9 +++++++++ src/internal/operations/backup.go | 24 ++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/src/internal/kopia/upload.go b/src/internal/kopia/upload.go index 6a99b9898..d9320f2a6 100644 --- a/src/internal/kopia/upload.go +++ b/src/internal/kopia/upload.go @@ -15,6 +15,7 @@ import ( "github.com/hashicorp/go-multierror" "github.com/kopia/kopia/fs" "github.com/kopia/kopia/fs/virtualfs" + "github.com/kopia/kopia/repo/manifest" "github.com/kopia/kopia/snapshot/snapshotfs" "github.com/pkg/errors" @@ -884,6 +885,17 @@ func inflateDirTree( return nil, errors.Wrap(err, "inflating collection tree") } + baseIDs := make([]manifest.ID, 0, len(baseSnaps)) + for _, snap := range baseSnaps { + baseIDs = append(baseIDs, snap.ID) + } + + logger.Ctx(ctx).Infow( + "merging hierarchies from base snapshots", + "snapshot_ids", + baseIDs, + ) + for _, snap := range baseSnaps { if err = inflateBaseTree(ctx, loader, snap, updatedPaths, roots); err != nil { return nil, errors.Wrap(err, "inflating base snapshot tree(s)") diff --git a/src/internal/kopia/wrapper.go b/src/internal/kopia/wrapper.go index 3e8f5b338..0976bb40e 100644 --- a/src/internal/kopia/wrapper.go +++ b/src/internal/kopia/wrapper.go @@ -178,11 +178,20 @@ func (w Wrapper) makeSnapshotWithRoot( bc = &stats.ByteCounter{} ) + snapIDs := make([]manifest.ID, 0, len(prevSnapEntries)) prevSnaps := make([]*snapshot.Manifest, 0, len(prevSnapEntries)) + for _, ent := range prevSnapEntries { prevSnaps = append(prevSnaps, ent.Manifest) + snapIDs = append(snapIDs, ent.ID) } + logger.Ctx(ctx).Infow( + "using snapshots for kopia-assisted incrementals", + "snapshot_ids", + snapIDs, + ) + err := repo.WriteSession( ctx, w.c, diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 7f562321c..89dbb340d 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -340,6 +340,8 @@ func consumeBackupDataCollections( for _, m := range mans { paths := make([]*path.Builder, 0, len(m.Reasons)) + services := map[string]struct{}{} + categories := map[string]struct{}{} for _, reason := range m.Reasons { pb, err := builderFromReason(tenantID, reason) @@ -348,12 +350,34 @@ func consumeBackupDataCollections( } paths = append(paths, pb) + services[reason.Service.String()] = struct{}{} + categories[reason.Category.String()] = struct{}{} } bases = append(bases, kopia.IncrementalBase{ Manifest: m.Manifest, SubtreePaths: paths, }) + + svcs := make([]string, 0, len(services)) + for k := range services { + svcs = append(svcs, k) + } + + cats := make([]string, 0, len(categories)) + for k := range categories { + cats = append(cats, k) + } + + logger.Ctx(ctx).Infow( + "using base for backup", + "snapshot_id", + m.ID, + "services", + svcs, + "categories", + cats, + ) } return bu.BackupCollections(ctx, bases, cs, tags, isIncremental)