From 446ccfe4912bd7bf334bff46c69f3260e010159d Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Fri, 31 Mar 2023 10:13:34 +0530 Subject: [PATCH 01/37] Skip large OneNote items that cannot be downloaded (#2925) OneNote files >2GB cannot be downloaded via the graph API. This change will gracefully skip them and prevent the backup from erroring out. A OneNote file is represented by a Package(folder) which contains two file within it, `.one` and `.onetoc2`. From what I can tell the `onetoc2` file is the metadata file and the `one` file is the one that contains data and can get big. **The current implementation has a limitation(or feature depending on how you see it) in that we will end up doing a partial backup with just the `onetoc2` file but avoiding the big `one` file if that is big.** I did not try to change the behaviour as even currently if for somehow we ended up with an error like 404 when trying to backup one of these files, we do skip it. I've added a comment in for now, let me know if we should go back and revisit the behaviour. *The main issue is the fact that we only hit this problem once it reaches kopia and removing it at that point is harder.* --- #### Does this PR need a docs update or release note? - [x] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [ ] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * fixes https://github.com/alcionai/corso/issues/2910 #### Test Plan - [ ] :muscle: Manual - [x] :zap: Unit test - [ ] :green_heart: E2E --- CHANGELOG.md | 2 + src/internal/connector/onedrive/collection.go | 30 ++++- .../connector/onedrive/collection_test.go | 124 ++++++++++++++++++ .../connector/onedrive/collections.go | 22 ++++ src/internal/stats/stats.go | 7 +- src/pkg/backup/backup.go | 38 ++++-- src/pkg/backup/backup_test.go | 23 +++- src/pkg/fault/item.go | 7 + 8 files changed, 230 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b65e0ccbf..357e5f8f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Enable compression for all data uploaded by kopia. - SharePoint --folder selectors correctly return items. - Fix Exchange cli args for filtering items +- Skip huge OneNote items that Graph API prevents us from downloading +- Skip OneNote items bigger than 2GB (Graph API prevents us from downloading them) ## [v0.6.1] (beta) - 2023-03-21 diff --git a/src/internal/connector/onedrive/collection.go b/src/internal/connector/onedrive/collection.go index 5ac7a14dd..25df599fc 100644 --- a/src/internal/connector/onedrive/collection.go +++ b/src/internal/connector/onedrive/collection.go @@ -41,6 +41,9 @@ const ( MetaFileSuffix = ".meta" DirMetaFileSuffix = ".dirmeta" DataFileSuffix = ".data" + + // Used to compare in case of OneNote files + MaxOneNoteFileSize = 2 * 1024 * 1024 * 1024 ) func IsMetaFile(name string) bool { @@ -96,6 +99,14 @@ type Collection struct { // Specifies if it new, moved/rename or deleted state data.CollectionState + // scope specifies what scope the items in a collection belongs + // to. This is primarily useful when dealing with a "package", + // like in the case of a OneNote file. A OneNote file is a + // collection with a package scope and multiple files in it. Most + // other collections have a scope of folder to indicate that the + // files within them belong to a folder. + scope collectionScope + // should only be true if the old delta token expired doNotMergeItems bool } @@ -134,6 +145,7 @@ func NewCollection( statusUpdater support.StatusUpdater, source driveSource, ctrlOpts control.Options, + colScope collectionScope, doNotMergeItems bool, ) *Collection { c := &Collection{ @@ -148,6 +160,7 @@ func NewCollection( statusUpdater: statusUpdater, ctrl: ctrlOpts, state: data.StateOf(prevPath, folderPath), + scope: colScope, doNotMergeItems: doNotMergeItems, } @@ -345,12 +358,27 @@ func (oc *Collection) getDriveItemContent( } if clues.HasLabel(err, graph.LabelStatus(http.StatusNotFound)) || graph.IsErrDeletedInFlight(err) { - logger.CtxErr(ctx, err).With("skipped_reason", fault.SkipNotFound).Error("item not found") + logger.CtxErr(ctx, err).With("skipped_reason", fault.SkipNotFound).Info("item not found") el.AddSkip(fault.FileSkip(fault.SkipNotFound, itemID, itemName, graph.ItemInfo(item))) return nil, clues.Wrap(err, "downloading item").Label(graph.LabelsSkippable) } + // Skip big OneNote files as they can't be downloaded + if clues.HasLabel(err, graph.LabelStatus(http.StatusServiceUnavailable)) && + oc.scope == CollectionScopePackage && *item.GetSize() >= MaxOneNoteFileSize { + // FIXME: It is possible that in case of a OneNote file we + // will end up just backing up the `onetoc2` file without + // the one file which is the important part of the OneNote + // "item". This will have to be handled during the + // restore, or we have to handle it separately by somehow + // deleting the entire collection. + logger.CtxErr(ctx, err).With("skipped_reason", fault.SkipBigOneNote).Info("max OneNote file size exceeded") + el.AddSkip(fault.FileSkip(fault.SkipBigOneNote, itemID, itemName, graph.ItemInfo(item))) + + return nil, clues.Wrap(err, "downloading item").Label(graph.LabelsSkippable) + } + logger.CtxErr(ctx, err).Error("downloading item") el.AddRecoverable(clues.Stack(err).WithClues(ctx).Label(fault.LabelForceNoBackupCreation)) diff --git a/src/internal/connector/onedrive/collection_test.go b/src/internal/connector/onedrive/collection_test.go index dbf5d76a3..e870f94e3 100644 --- a/src/internal/connector/onedrive/collection_test.go +++ b/src/internal/connector/onedrive/collection_test.go @@ -214,6 +214,7 @@ func (suite *CollectionUnitTestSuite) TestCollection() { suite.testStatusUpdater(&wg, &collStatus), test.source, control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + CollectionScopeFolder, true) require.NotNil(t, coll) assert.Equal(t, folderPath, coll.FullPath()) @@ -353,6 +354,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadError() { suite.testStatusUpdater(&wg, &collStatus), test.source, control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + CollectionScopeFolder, true) mockItem := models.NewDriveItem() @@ -442,6 +444,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadUnauthorizedErrorRetry() suite.testStatusUpdater(&wg, &collStatus), test.source, control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + CollectionScopeFolder, true) mockItem := models.NewDriveItem() @@ -541,6 +544,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionPermissionBackupLatestModTim suite.testStatusUpdater(&wg, &collStatus), test.source, control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + CollectionScopeFolder, true) mtime := time.Now().AddDate(0, -1, 0) @@ -597,3 +601,123 @@ func (suite *CollectionUnitTestSuite) TestCollectionPermissionBackupLatestModTim }) } } + +type GetDriveItemUnitTestSuite struct { + tester.Suite +} + +func TestGetDriveItemUnitTestSuite(t *testing.T) { + suite.Run(t, &GetDriveItemUnitTestSuite{Suite: tester.NewUnitSuite(t)}) +} + +func (suite *GetDriveItemUnitTestSuite) TestGetDriveItemError() { + strval := "not-important" + + table := []struct { + name string + colScope collectionScope + itemSize int64 + labels []string + err error + }{ + { + name: "Simple item fetch no error", + colScope: CollectionScopeFolder, + itemSize: 10, + err: nil, + }, + { + name: "Simple item fetch error", + colScope: CollectionScopeFolder, + itemSize: 10, + err: assert.AnError, + }, + { + name: "malware error", + colScope: CollectionScopeFolder, + itemSize: 10, + err: clues.New("test error").Label(graph.LabelsMalware), + labels: []string{graph.LabelsMalware, graph.LabelsSkippable}, + }, + { + name: "file not found error", + colScope: CollectionScopeFolder, + itemSize: 10, + err: clues.New("test error").Label(graph.LabelStatus(http.StatusNotFound)), + labels: []string{graph.LabelStatus(http.StatusNotFound), graph.LabelsSkippable}, + }, + { + // This should create an error that stops the backup + name: "small OneNote file", + colScope: CollectionScopePackage, + itemSize: 10, + err: clues.New("test error").Label(graph.LabelStatus(http.StatusServiceUnavailable)), + labels: []string{graph.LabelStatus(http.StatusServiceUnavailable)}, + }, + { + name: "big OneNote file", + colScope: CollectionScopePackage, + itemSize: MaxOneNoteFileSize, + err: clues.New("test error").Label(graph.LabelStatus(http.StatusServiceUnavailable)), + labels: []string{graph.LabelStatus(http.StatusServiceUnavailable), graph.LabelsSkippable}, + }, + { + // This should block backup, only big OneNote files should be a problem + name: "big file", + colScope: CollectionScopeFolder, + itemSize: MaxOneNoteFileSize, + err: clues.New("test error").Label(graph.LabelStatus(http.StatusServiceUnavailable)), + labels: []string{graph.LabelStatus(http.StatusServiceUnavailable)}, + }, + } + + for _, test := range table { + suite.Run(test.name, func() { + ctx, flush := tester.NewContext() + defer flush() + + var ( + t = suite.T() + errs = fault.New(false) + item = models.NewDriveItem() + col = &Collection{scope: test.colScope} + ) + + item.SetId(&strval) + item.SetName(&strval) + item.SetSize(&test.itemSize) + + col.itemReader = func( + ctx context.Context, + hc *http.Client, + item models.DriveItemable, + ) (details.ItemInfo, io.ReadCloser, error) { + return details.ItemInfo{}, nil, test.err + } + + col.itemGetter = func( + ctx context.Context, + srv graph.Servicer, + driveID, itemID string, + ) (models.DriveItemable, error) { + // We are not testing this err here + return item, nil + } + + _, err := col.getDriveItemContent(ctx, item, errs) + if test.err == nil { + assert.NoError(t, err, "no error") + return + } + + assert.EqualError(t, err, clues.Wrap(test.err, "downloading item").Error(), "error") + + labelsMap := map[string]struct{}{} + for _, l := range test.labels { + labelsMap[l] = struct{}{} + } + + assert.Equal(t, labelsMap, clues.Labels(err)) + }) + } +} diff --git a/src/internal/connector/onedrive/collections.go b/src/internal/connector/onedrive/collections.go index acab9e573..70ad1be57 100644 --- a/src/internal/connector/onedrive/collections.go +++ b/src/internal/connector/onedrive/collections.go @@ -33,6 +33,20 @@ const ( SharePointSource ) +type collectionScope int + +const ( + // CollectionScopeUnknown is used when we don't know and don't need + // to know the kind, like in the case of deletes + CollectionScopeUnknown collectionScope = iota + + // CollectionScopeFolder is used for regular folder collections + CollectionScopeFolder + + // CollectionScopePackage is used to represent OneNote items + CollectionScopePackage +) + const ( restrictedDirectory = "Site Pages" rootDrivePattern = "/drives/%s/root:" @@ -411,6 +425,7 @@ func (c *Collections) Get( c.statusUpdater, c.source, c.ctrl, + CollectionScopeUnknown, true) c.CollectionMap[driveID][fldID] = col @@ -572,6 +587,7 @@ func (c *Collections) handleDelete( c.statusUpdater, c.source, c.ctrl, + CollectionScopeUnknown, // DoNotMerge is not checked for deleted items. false) @@ -744,6 +760,11 @@ func (c *Collections) UpdateCollections( continue } + colScope := CollectionScopeFolder + if item.GetPackage() != nil { + colScope = CollectionScopePackage + } + col := NewCollection( c.itemClient, collectionPath, @@ -753,6 +774,7 @@ func (c *Collections) UpdateCollections( c.statusUpdater, c.source, c.ctrl, + colScope, invalidPrevDelta, ) col.driveName = driveName diff --git a/src/internal/stats/stats.go b/src/internal/stats/stats.go index 32402221d..c061e67bc 100644 --- a/src/internal/stats/stats.go +++ b/src/internal/stats/stats.go @@ -30,7 +30,8 @@ func (bc *ByteCounter) Count(i int64) { } type SkippedCounts struct { - TotalSkippedItems int `json:"totalSkippedItems"` - SkippedMalware int `json:"skippedMalware"` - SkippedNotFound int `json:"skippedNotFound"` + TotalSkippedItems int `json:"totalSkippedItems"` + SkippedMalware int `json:"skippedMalware"` + SkippedNotFound int `json:"skippedNotFound"` + SkippedInvalidOneNoteFile int `json:"skippedInvalidOneNoteFile"` } diff --git a/src/pkg/backup/backup.go b/src/pkg/backup/backup.go index 24f02992a..c8beef662 100644 --- a/src/pkg/backup/backup.go +++ b/src/pkg/backup/backup.go @@ -3,6 +3,7 @@ package backup import ( "context" "fmt" + "strings" "time" "github.com/alcionai/corso/src/cli/print" @@ -75,10 +76,12 @@ func New( } var ( - errCount = len(fe.Items) - skipCount = len(fe.Skipped) - failMsg string - malware, notFound, otherSkips int + errCount = len(fe.Items) + skipCount = len(fe.Skipped) + failMsg string + + malware, notFound, + invalidONFile, otherSkips int ) if fe.Failure != nil { @@ -92,6 +95,8 @@ func New( malware++ case s.HasCause(fault.SkipNotFound): notFound++ + case s.HasCause(fault.SkipBigOneNote): + invalidONFile++ default: otherSkips++ } @@ -121,9 +126,10 @@ func New( ReadWrites: rw, StartAndEndTime: se, SkippedCounts: stats.SkippedCounts{ - TotalSkippedItems: skipCount, - SkippedMalware: malware, - SkippedNotFound: notFound, + TotalSkippedItems: skipCount, + SkippedMalware: malware, + SkippedNotFound: notFound, + SkippedInvalidOneNoteFile: invalidONFile, }, } } @@ -211,23 +217,27 @@ func (b Backup) Values() []string { if b.TotalSkippedItems > 0 { status += fmt.Sprintf("%d skipped", b.TotalSkippedItems) - if b.SkippedMalware+b.SkippedNotFound > 0 { + if b.SkippedMalware+b.SkippedNotFound+b.SkippedInvalidOneNoteFile > 0 { status += ": " } } - if b.SkippedMalware > 0 { - status += fmt.Sprintf("%d malware", b.SkippedMalware) + skipped := []string{} - if b.SkippedNotFound > 0 { - status += ", " - } + if b.SkippedMalware > 0 { + skipped = append(skipped, fmt.Sprintf("%d malware", b.SkippedMalware)) } if b.SkippedNotFound > 0 { - status += fmt.Sprintf("%d not found", b.SkippedNotFound) + skipped = append(skipped, fmt.Sprintf("%d not found", b.SkippedNotFound)) } + if b.SkippedInvalidOneNoteFile > 0 { + skipped = append(skipped, fmt.Sprintf("%d invalid OneNote file", b.SkippedInvalidOneNoteFile)) + } + + status += strings.Join(skipped, ", ") + if errCount+b.TotalSkippedItems > 0 { status += (")") } diff --git a/src/pkg/backup/backup_test.go b/src/pkg/backup/backup_test.go index 570bcf187..59beeb313 100644 --- a/src/pkg/backup/backup_test.go +++ b/src/pkg/backup/backup_test.go @@ -153,17 +153,30 @@ func (suite *BackupUnitSuite) TestBackup_Values_statusVariations() { expect: "test (42 errors, 1 skipped: 1 not found)", }, { - name: "errors, malware, notFound", + name: "errors and invalid OneNote", bup: backup.Backup{ Status: "test", ErrorCount: 42, SkippedCounts: stats.SkippedCounts{ - TotalSkippedItems: 1, - SkippedMalware: 1, - SkippedNotFound: 1, + TotalSkippedItems: 1, + SkippedInvalidOneNoteFile: 1, }, }, - expect: "test (42 errors, 1 skipped: 1 malware, 1 not found)", + expect: "test (42 errors, 1 skipped: 1 invalid OneNote file)", + }, + { + name: "errors, malware, notFound, invalid OneNote", + bup: backup.Backup{ + Status: "test", + ErrorCount: 42, + SkippedCounts: stats.SkippedCounts{ + TotalSkippedItems: 1, + SkippedMalware: 1, + SkippedNotFound: 1, + SkippedInvalidOneNoteFile: 1, + }, + }, + expect: "test (42 errors, 1 skipped: 1 malware, 1 not found, 1 invalid OneNote file)", }, } for _, test := range table { diff --git a/src/pkg/fault/item.go b/src/pkg/fault/item.go index 83bdf48c1..551fb01fb 100644 --- a/src/pkg/fault/item.go +++ b/src/pkg/fault/item.go @@ -156,6 +156,13 @@ const ( // SkipNotFound identifies that a file was skipped because we could // not find it when trying to download contents SkipNotFound skipCause = "file_not_found" + + // SkipBigOneNote identifies that a file was skipped because it + // was big OneNote file and we can only download OneNote files which + // are less that 2GB in size. + //nolint:lll + // https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa#onenotenotebooks + SkipBigOneNote skipCause = "big_one_note_file" ) var _ print.Printable = &Skipped{} From 7e04cefa2c30103ff8fd0a2a73bdc86d321c1937 Mon Sep 17 00:00:00 2001 From: Keepers Date: Fri, 31 Mar 2023 09:56:19 -0600 Subject: [PATCH 02/37] replace graphConnector with interface (#2932) Replaces the operations graphConnector reference with an interface. Restore and Backups have separate, unique interfaces. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Issue(s) * #2825 #### Test Plan - [x] :zap: Unit test - [x] :green_heart: E2E --- src/cmd/factory/impl/common.go | 2 +- src/internal/connector/data_collections.go | 22 +++-- .../connector/data_collections_test.go | 17 ++-- src/internal/connector/graph_connector.go | 20 ++++- .../graph_connector_disconnected_test.go | 9 +- .../connector/graph_connector_test.go | 76 +++++++++-------- .../mockconnector/mock_data_connector.go | 55 ++++++++++++ src/internal/data/metrics.go | 17 ++++ src/internal/kopia/wrapper.go | 19 +++-- src/internal/kopia/wrapper_test.go | 30 +++---- src/internal/operations/backup.go | 58 ++++++------- .../operations/backup_integration_test.go | 17 ++-- src/internal/operations/backup_test.go | 31 ++++--- src/internal/operations/inject/inject.go | 66 +++++++++++++++ src/internal/operations/manifests.go | 7 +- src/internal/operations/manifests_test.go | 76 +++++++++-------- src/internal/operations/operation.go | 8 -- src/internal/operations/operation_test.go | 14 ++-- src/internal/operations/restore.go | 84 ++++++++++++------- src/internal/operations/restore_test.go | 26 +++--- src/internal/streamstore/streamstore.go | 32 ++----- 21 files changed, 430 insertions(+), 256 deletions(-) create mode 100644 src/internal/connector/mockconnector/mock_data_connector.go create mode 100644 src/internal/data/metrics.go create mode 100644 src/internal/operations/inject/inject.go diff --git a/src/cmd/factory/impl/common.go b/src/cmd/factory/impl/common.go index 6215b58d8..4a8ee1b52 100644 --- a/src/cmd/factory/impl/common.go +++ b/src/cmd/factory/impl/common.go @@ -96,7 +96,7 @@ func generateAndRestoreItems( print.Infof(ctx, "Generating %d %s items in %s\n", howMany, cat, Destination) - return gc.RestoreDataCollections(ctx, version.Backup, acct, sel, dest, opts, dataColls, errs) + return gc.ConsumeRestoreCollections(ctx, version.Backup, acct, sel, dest, opts, dataColls, errs) } // ------------------------------------------------------------------------------------------ diff --git a/src/internal/connector/data_collections.go b/src/internal/connector/data_collections.go index 728e3b52f..f7f2ba143 100644 --- a/src/internal/connector/data_collections.go +++ b/src/internal/connector/data_collections.go @@ -27,19 +27,23 @@ import ( // Data Collections // --------------------------------------------------------------------------- -// DataCollections utility function to launch backup operations for exchange and -// onedrive. metadataCols contains any collections with metadata files that may -// be useful for the current backup. Metadata can include things like delta -// tokens or the previous backup's folder hierarchy. The absence of metadataCols -// results in all data being pulled. -func (gc *GraphConnector) DataCollections( +// ProduceBackupCollections generates a slice of data.BackupCollections for the service +// specified in the selectors. +// The metadata field can include things like delta tokens or the previous backup's +// folder hierarchy. The absence of metadata causes the collection creation to ignore +// prior history (ie, incrementals) and run a full backup. +func (gc *GraphConnector) ProduceBackupCollections( ctx context.Context, + ownerID, ownerName string, sels selectors.Selector, metadata []data.RestoreCollection, ctrlOpts control.Options, errs *fault.Bus, ) ([]data.BackupCollection, map[string]map[string]struct{}, error) { - ctx, end := diagnostics.Span(ctx, "gc:dataCollections", diagnostics.Index("service", sels.Service.String())) + ctx, end := diagnostics.Span( + ctx, + "gc:produceBackupCollections", + diagnostics.Index("service", sels.Service.String())) defer end() err := verifyBackupInputs(sels, gc.GetSiteIDs()) @@ -188,10 +192,10 @@ func checkServiceEnabled( return true, nil } -// RestoreDataCollections restores data from the specified collections +// ConsumeRestoreCollections restores data from the specified collections // into M365 using the GraphAPI. // SideEffect: gc.status is updated at the completion of operation -func (gc *GraphConnector) RestoreDataCollections( +func (gc *GraphConnector) ConsumeRestoreCollections( ctx context.Context, backupVersion int, acct account.Account, diff --git a/src/internal/connector/data_collections_test.go b/src/internal/connector/data_collections_test.go index 44cffd192..00d16c882 100644 --- a/src/internal/connector/data_collections_test.go +++ b/src/internal/connector/data_collections_test.go @@ -129,8 +129,8 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestExchangeDataCollection } } - status := connector.AwaitStatus() - assert.NotZero(t, status.Metrics.Successes) + status := connector.Wait() + assert.NotZero(t, status.Successes) t.Log(status.String()) }) } @@ -205,8 +205,9 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestDataCollections_invali suite.Run(test.name, func() { t := suite.T() - collections, excludes, err := connector.DataCollections( + collections, excludes, err := connector.ProduceBackupCollections( ctx, + owners[0], owners[0], test.getSelector(t), nil, control.Options{}, @@ -286,8 +287,8 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestSharePointDataCollecti } } - status := connector.AwaitStatus() - assert.NotZero(t, status.Metrics.Successes) + status := connector.Wait() + assert.NotZero(t, status.Successes) t.Log(status.String()) }) } @@ -336,8 +337,9 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar sel := selectors.NewSharePointBackup(siteIDs) sel.Include(sel.LibraryFolders([]string{"foo"}, selectors.PrefixMatch())) - cols, excludes, err := gc.DataCollections( + cols, excludes, err := gc.ProduceBackupCollections( ctx, + siteIDs[0], siteIDs[0], sel.Selector, nil, control.Options{}, @@ -374,8 +376,9 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar sel := selectors.NewSharePointBackup(siteIDs) sel.Include(sel.Lists(selectors.Any(), selectors.PrefixMatch())) - cols, excludes, err := gc.DataCollections( + cols, excludes, err := gc.ProduceBackupCollections( ctx, + siteIDs[0], siteIDs[0], sel.Selector, nil, control.Options{}, diff --git a/src/internal/connector/graph_connector.go b/src/internal/connector/graph_connector.go index 2f8652f81..692a9b83d 100644 --- a/src/internal/connector/graph_connector.go +++ b/src/internal/connector/graph_connector.go @@ -22,7 +22,9 @@ import ( "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/sharepoint" "github.com/alcionai/corso/src/internal/connector/support" + "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/diagnostics" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/filters" @@ -32,6 +34,12 @@ import ( // Graph Connector // --------------------------------------------------------------------------- +// must comply with BackupProducer and RestoreConsumer +var ( + _ inject.BackupProducer = &GraphConnector{} + _ inject.RestoreConsumer = &GraphConnector{} +) + // GraphConnector is a struct used to wrap the GraphServiceClient and // GraphRequestAdapter from the msgraph-sdk-go. Additional fields are for // bookkeeping and interfacing with other component. @@ -223,7 +231,7 @@ func (gc *GraphConnector) UnionSiteIDsAndWebURLs( } // AwaitStatus waits for all gc tasks to complete and then returns status -func (gc *GraphConnector) AwaitStatus() *support.ConnectorOperationStatus { +func (gc *GraphConnector) Wait() *data.CollectionStats { defer func() { if gc.region != nil { gc.region.End() @@ -233,12 +241,18 @@ func (gc *GraphConnector) AwaitStatus() *support.ConnectorOperationStatus { gc.wg.Wait() // clean up and reset statefulness - status := gc.status + dcs := data.CollectionStats{ + Folders: gc.status.Folders, + Objects: gc.status.Metrics.Objects, + Successes: gc.status.Metrics.Successes, + Bytes: gc.status.Metrics.Bytes, + Details: gc.status.String(), + } gc.wg = &sync.WaitGroup{} gc.status = support.ConnectorOperationStatus{} - return &status + return &dcs } // UpdateStatus is used by gc initiated tasks to indicate completion diff --git a/src/internal/connector/graph_connector_disconnected_test.go b/src/internal/connector/graph_connector_disconnected_test.go index d92a018e4..2d327246b 100644 --- a/src/internal/connector/graph_connector_disconnected_test.go +++ b/src/internal/connector/graph_connector_disconnected_test.go @@ -111,17 +111,16 @@ func (suite *DisconnectedGraphConnectorSuite) TestGraphConnector_Status() { go statusTestTask(&gc, 4, 1, 1) go statusTestTask(&gc, 4, 1, 1) - status := gc.AwaitStatus() - + stats := gc.Wait() t := suite.T() assert.NotEmpty(t, gc.PrintableStatus()) // Expect 8 objects - assert.Equal(t, 8, status.Metrics.Objects) + assert.Equal(t, 8, stats.Objects) // Expect 2 success - assert.Equal(t, 2, status.Metrics.Successes) + assert.Equal(t, 2, stats.Successes) // Expect 2 folders - assert.Equal(t, 2, status.Folders) + assert.Equal(t, 2, stats.Folders) } func (suite *DisconnectedGraphConnectorSuite) TestVerifyBackupInputs_allServices() { diff --git a/src/internal/connector/graph_connector_test.go b/src/internal/connector/graph_connector_test.go index dae0ed4cc..2a5fbc1ac 100644 --- a/src/internal/connector/graph_connector_test.go +++ b/src/internal/connector/graph_connector_test.go @@ -135,7 +135,7 @@ func (suite *GraphConnectorUnitSuite) TestUnionSiteIDsAndWebURLs() { } } -func (suite *GraphConnectorUnitSuite) TestGraphConnector_AwaitStatus() { +func (suite *GraphConnectorUnitSuite) TestGraphConnector_Wait() { ctx, flush := tester.NewContext() defer flush() @@ -156,14 +156,14 @@ func (suite *GraphConnectorUnitSuite) TestGraphConnector_AwaitStatus() { gc.wg.Add(1) gc.UpdateStatus(status) - result := gc.AwaitStatus() + result := gc.Wait() require.NotNil(t, result) assert.Nil(t, gc.region, "region") assert.Empty(t, gc.status, "status") assert.Equal(t, 1, result.Folders) - assert.Equal(t, 2, result.Metrics.Objects) - assert.Equal(t, 3, result.Metrics.Successes) - assert.Equal(t, int64(4), result.Metrics.Bytes) + assert.Equal(t, 2, result.Objects) + assert.Equal(t, 3, result.Successes) + assert.Equal(t, int64(4), result.Bytes) } // --------------------------------------------------------------------------- @@ -241,7 +241,7 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreFailsBadService() { } ) - deets, err := suite.connector.RestoreDataCollections( + deets, err := suite.connector.ConsumeRestoreCollections( ctx, version.Backup, acct, @@ -256,10 +256,10 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreFailsBadService() { assert.Error(t, err, clues.ToCore(err)) assert.NotNil(t, deets) - status := suite.connector.AwaitStatus() - assert.Equal(t, 0, status.Metrics.Objects) + status := suite.connector.Wait() + assert.Equal(t, 0, status.Objects) assert.Equal(t, 0, status.Folders) - assert.Equal(t, 0, status.Metrics.Successes) + assert.Equal(t, 0, status.Successes) } func (suite *GraphConnectorIntegrationSuite) TestEmptyCollections() { @@ -320,7 +320,7 @@ func (suite *GraphConnectorIntegrationSuite) TestEmptyCollections() { ctx, flush := tester.NewContext() defer flush() - deets, err := suite.connector.RestoreDataCollections( + deets, err := suite.connector.ConsumeRestoreCollections( ctx, version.Backup, suite.acct, @@ -335,10 +335,10 @@ func (suite *GraphConnectorIntegrationSuite) TestEmptyCollections() { require.NoError(t, err, clues.ToCore(err)) assert.NotNil(t, deets) - stats := suite.connector.AwaitStatus() - assert.Zero(t, stats.Metrics.Objects) + stats := suite.connector.Wait() + assert.Zero(t, stats.Objects) assert.Zero(t, stats.Folders) - assert.Zero(t, stats.Metrics.Successes) + assert.Zero(t, stats.Successes) }) } } @@ -400,7 +400,7 @@ func runRestore( restoreGC := loadConnector(ctx, t, graph.HTTPClient(graph.NoTimeout()), config.resource) restoreSel := getSelectorWith(t, config.service, config.resourceOwners, true) - deets, err := restoreGC.RestoreDataCollections( + deets, err := restoreGC.ConsumeRestoreCollections( ctx, backupVersion, config.acct, @@ -412,11 +412,11 @@ func runRestore( require.NoError(t, err, clues.ToCore(err)) assert.NotNil(t, deets) - status := restoreGC.AwaitStatus() + status := restoreGC.Wait() runTime := time.Since(start) - assert.Equal(t, numRestoreItems, status.Metrics.Objects, "restored status.Metrics.Objects") - assert.Equal(t, numRestoreItems, status.Metrics.Successes, "restored status.Metrics.Successes") + assert.Equal(t, numRestoreItems, status.Objects, "restored status.Objects") + assert.Equal(t, numRestoreItems, status.Successes, "restored status.Successes") assert.Len( t, deets.Entries, @@ -457,8 +457,10 @@ func runBackupAndCompare( t.Logf("Selective backup of %s\n", backupSel) start := time.Now() - dcs, excludes, err := backupGC.DataCollections( + dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, + backupSel.DiscreteOwner, + backupSel.DiscreteOwner, backupSel, nil, config.opts, @@ -480,12 +482,12 @@ func runBackupAndCompare( config.dest, config.opts.RestorePermissions) - status := backupGC.AwaitStatus() + status := backupGC.Wait() - assert.Equalf(t, totalItems+skipped, status.Metrics.Objects, - "backup status.Metrics.Objects; wanted %d items + %d skipped", totalItems, skipped) - assert.Equalf(t, totalItems+skipped, status.Metrics.Successes, - "backup status.Metrics.Successes; wanted %d items + %d skipped", totalItems, skipped) + assert.Equalf(t, totalItems+skipped, status.Objects, + "backup status.Objects; wanted %d items + %d skipped", totalItems, skipped) + assert.Equalf(t, totalItems+skipped, status.Successes, + "backup status.Successes; wanted %d items + %d skipped", totalItems, skipped) } func runRestoreBackupTest( @@ -964,7 +966,7 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames ) restoreGC := loadConnector(ctx, t, graph.HTTPClient(graph.NoTimeout()), test.resource) - deets, err := restoreGC.RestoreDataCollections( + deets, err := restoreGC.ConsumeRestoreCollections( ctx, version.Backup, suite.acct, @@ -979,12 +981,12 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames require.NoError(t, err, clues.ToCore(err)) require.NotNil(t, deets) - status := restoreGC.AwaitStatus() + status := restoreGC.Wait() // Always just 1 because it's just 1 collection. - assert.Equal(t, totalItems, status.Metrics.Objects, "status.Metrics.Objects") - assert.Equal(t, totalItems, status.Metrics.Successes, "status.Metrics.Successes") - assert.Len( - t, deets.Entries, totalItems, + assert.Equal(t, totalItems, status.Objects, "status.Objects") + assert.Equal(t, totalItems, status.Successes, "status.Successes") + assert.Equal( + t, totalItems, len(deets.Entries), "details entries contains same item count as total successful items restored") t.Log("Restore complete") @@ -996,8 +998,10 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames backupSel := backupSelectorForExpected(t, test.service, expectedDests) t.Log("Selective backup of", backupSel) - dcs, excludes, err := backupGC.DataCollections( + dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, + backupSel.DiscreteOwner, + backupSel.DiscreteOwner, backupSel, nil, control.Options{ @@ -1023,9 +1027,9 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames control.RestoreDestination{}, true) - status := backupGC.AwaitStatus() - assert.Equal(t, allItems+skipped, status.Metrics.Objects, "status.Metrics.Objects") - assert.Equal(t, allItems+skipped, status.Metrics.Successes, "status.Metrics.Successes") + status := backupGC.Wait() + assert.Equal(t, allItems+skipped, status.Objects, "status.Objects") + assert.Equal(t, allItems+skipped, status.Successes, "status.Successes") }) } } @@ -1147,8 +1151,10 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections start = time.Now() ) - dcs, excludes, err := backupGC.DataCollections( + dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, + backupSel.DiscreteOwner, + backupSel.DiscreteOwner, backupSel, nil, control.Options{ @@ -1191,7 +1197,7 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections assert.ElementsMatch(t, test.categories, foundCategories) - backupGC.AwaitStatus() + backupGC.Wait() assert.NoError(t, errs.Failure()) }) diff --git a/src/internal/connector/mockconnector/mock_data_connector.go b/src/internal/connector/mockconnector/mock_data_connector.go new file mode 100644 index 000000000..453345a2c --- /dev/null +++ b/src/internal/connector/mockconnector/mock_data_connector.go @@ -0,0 +1,55 @@ +package mockconnector + +import ( + "context" + + "github.com/alcionai/corso/src/internal/data" + "github.com/alcionai/corso/src/pkg/account" + "github.com/alcionai/corso/src/pkg/backup/details" + "github.com/alcionai/corso/src/pkg/control" + "github.com/alcionai/corso/src/pkg/fault" + "github.com/alcionai/corso/src/pkg/selectors" +) + +type GraphConnector struct { + Collections []data.BackupCollection + Exclude map[string]map[string]struct{} + + Deets *details.Details + + Err error + + Stats data.CollectionStats +} + +func (gc GraphConnector) ProduceBackupCollections( + _ context.Context, + _, _ string, + _ selectors.Selector, + _ []data.RestoreCollection, + _ control.Options, + _ *fault.Bus, +) ( + []data.BackupCollection, + map[string]map[string]struct{}, + error, +) { + return gc.Collections, gc.Exclude, gc.Err +} + +func (gc GraphConnector) Wait() *data.CollectionStats { + return &gc.Stats +} + +func (gc GraphConnector) ConsumeRestoreCollections( + _ context.Context, + _ int, + _ account.Account, + _ selectors.Selector, + _ control.RestoreDestination, + _ control.Options, + _ []data.RestoreCollection, + _ *fault.Bus, +) (*details.Details, error) { + return gc.Deets, gc.Err +} diff --git a/src/internal/data/metrics.go b/src/internal/data/metrics.go new file mode 100644 index 000000000..f34d20a16 --- /dev/null +++ b/src/internal/data/metrics.go @@ -0,0 +1,17 @@ +package data + +type CollectionStats struct { + Folders, + Objects, + Successes int + Bytes int64 + Details string +} + +func (cs CollectionStats) IsZero() bool { + return cs.Folders+cs.Objects+cs.Successes+int(cs.Bytes) == 0 +} + +func (cs CollectionStats) String() string { + return cs.Details +} diff --git a/src/internal/kopia/wrapper.go b/src/internal/kopia/wrapper.go index 89258ec78..eff16e31a 100644 --- a/src/internal/kopia/wrapper.go +++ b/src/internal/kopia/wrapper.go @@ -93,6 +93,13 @@ func NewWrapper(c *conn) (*Wrapper, error) { return &Wrapper{c}, nil } +// FIXME: Circular references. +// must comply with restore producer and backup consumer +// var ( +// _ inject.BackupConsumer = &Wrapper{} +// _ inject.RestoreProducer = &Wrapper{} +// ) + type Wrapper struct { c *conn } @@ -124,13 +131,13 @@ type PrevRefs struct { Location path.Path } -// BackupCollections takes a set of collections and creates a kopia snapshot +// ConsumeBackupCollections takes a set of collections and creates a kopia snapshot // with the data that they contain. previousSnapshots is used for incremental // backups and should represent the base snapshot from which metadata is sourced // from as well as any incomplete snapshot checkpoints that may contain more // recent data than the base snapshot. The absence of previousSnapshots causes a // complete backup of all data. -func (w Wrapper) BackupCollections( +func (w Wrapper) ConsumeBackupCollections( ctx context.Context, previousSnapshots []IncrementalBase, collections []data.BackupCollection, @@ -143,7 +150,7 @@ func (w Wrapper) BackupCollections( return nil, nil, nil, clues.Stack(errNotConnected).WithClues(ctx) } - ctx, end := diagnostics.Span(ctx, "kopia:backupCollections") + ctx, end := diagnostics.Span(ctx, "kopia:consumeBackupCollections") defer end() if len(collections) == 0 && len(globalExcludeSet) == 0 { @@ -382,21 +389,21 @@ type ByteCounter interface { Count(numBytes int64) } -// RestoreMultipleItems looks up all paths- assuming each is an item declaration, +// ProduceRestoreCollections looks up all paths- assuming each is an item declaration, // not a directory- in the snapshot with id snapshotID. The path should be the // full path of the item from the root. Returns the results as a slice of single- // item DataCollections, where the DataCollection.FullPath() matches the path. // If the item does not exist in kopia or is not a file an error is returned. // The UUID of the returned DataStreams will be the name of the kopia file the // data is sourced from. -func (w Wrapper) RestoreMultipleItems( +func (w Wrapper) ProduceRestoreCollections( ctx context.Context, snapshotID string, paths []path.Path, bcounter ByteCounter, errs *fault.Bus, ) ([]data.RestoreCollection, error) { - ctx, end := diagnostics.Span(ctx, "kopia:restoreMultipleItems") + ctx, end := diagnostics.Span(ctx, "kopia:produceRestoreCollections") defer end() if len(paths) == 0 { diff --git a/src/internal/kopia/wrapper_test.go b/src/internal/kopia/wrapper_test.go index 2f03a1fb2..bd5d0d724 100644 --- a/src/internal/kopia/wrapper_test.go +++ b/src/internal/kopia/wrapper_test.go @@ -276,7 +276,7 @@ func (suite *KopiaIntegrationSuite) TestBackupCollections() { suite.Run(test.name, func() { t := suite.T() - stats, deets, _, err := suite.w.BackupCollections( + stats, deets, _, err := suite.w.ConsumeBackupCollections( suite.ctx, prevSnaps, collections, @@ -423,7 +423,7 @@ func (suite *KopiaIntegrationSuite) TestBackupCollections_NoDetailsForMeta() { t := suite.T() collections := test.cols() - stats, deets, prevShortRefs, err := suite.w.BackupCollections( + stats, deets, prevShortRefs, err := suite.w.ConsumeBackupCollections( suite.ctx, prevSnaps, collections, @@ -525,7 +525,7 @@ func (suite *KopiaIntegrationSuite) TestRestoreAfterCompressionChange() { fp2, err := suite.storePath2.Append(dc2.Names[0], true) require.NoError(t, err, clues.ToCore(err)) - stats, _, _, err := w.BackupCollections( + stats, _, _, err := w.ConsumeBackupCollections( ctx, nil, []data.BackupCollection{dc1, dc2}, @@ -543,7 +543,7 @@ func (suite *KopiaIntegrationSuite) TestRestoreAfterCompressionChange() { fp2.String(): dc2.Data[0], } - result, err := w.RestoreMultipleItems( + result, err := w.ProduceRestoreCollections( ctx, string(stats.SnapshotID), []path.Path{ @@ -644,7 +644,7 @@ func (suite *KopiaIntegrationSuite) TestBackupCollections_ReaderError() { }, } - stats, deets, _, err := suite.w.BackupCollections( + stats, deets, _, err := suite.w.ConsumeBackupCollections( suite.ctx, nil, collections, @@ -666,7 +666,7 @@ func (suite *KopiaIntegrationSuite) TestBackupCollections_ReaderError() { ic := i64counter{} - _, err = suite.w.RestoreMultipleItems( + _, err = suite.w.ProduceRestoreCollections( suite.ctx, string(stats.SnapshotID), []path.Path{failedPath}, @@ -706,7 +706,7 @@ func (suite *KopiaIntegrationSuite) TestBackupCollectionsHandlesNoCollections() ctx, flush := tester.NewContext() defer flush() - s, d, _, err := suite.w.BackupCollections( + s, d, _, err := suite.w.ConsumeBackupCollections( ctx, nil, test.collections, @@ -866,7 +866,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) SetupTest() { tags[k] = "" } - stats, deets, _, err := suite.w.BackupCollections( + stats, deets, _, err := suite.w.ConsumeBackupCollections( suite.ctx, nil, collections, @@ -1018,7 +1018,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestBackupExcludeItem() { } } - stats, _, _, err := suite.w.BackupCollections( + stats, _, _, err := suite.w.ConsumeBackupCollections( suite.ctx, []IncrementalBase{ { @@ -1045,7 +1045,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestBackupExcludeItem() { ic := i64counter{} - _, err = suite.w.RestoreMultipleItems( + _, err = suite.w.ProduceRestoreCollections( suite.ctx, string(stats.SnapshotID), []path.Path{ @@ -1058,7 +1058,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestBackupExcludeItem() { } } -func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems() { +func (suite *KopiaSimpleRepoIntegrationSuite) TestProduceRestoreCollections() { doesntExist, err := path.Build( testTenant, testUser, @@ -1148,7 +1148,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems() { ic := i64counter{} - result, err := suite.w.RestoreMultipleItems( + result, err := suite.w.ProduceRestoreCollections( suite.ctx, string(suite.snapshotID), test.inputPaths, @@ -1167,7 +1167,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems() { } } -func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems_Errors() { +func (suite *KopiaSimpleRepoIntegrationSuite) TestProduceRestoreCollections_Errors() { itemPath, err := suite.testPath1.Append(testFileName, true) require.NoError(suite.T(), err, clues.ToCore(err)) @@ -1197,7 +1197,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems_Errors() suite.Run(test.name, func() { t := suite.T() - c, err := suite.w.RestoreMultipleItems( + c, err := suite.w.ProduceRestoreCollections( suite.ctx, test.snapshotID, test.paths, @@ -1219,7 +1219,7 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestDeleteSnapshot() { itemPath := suite.files[suite.testPath1.String()][0].itemPath ic := i64counter{} - c, err := suite.w.RestoreMultipleItems( + c, err := suite.w.ProduceRestoreCollections( suite.ctx, string(suite.snapshotID), []path.Path{itemPath}, diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 89b223cd2..c97d7a1ec 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -9,14 +9,13 @@ import ( "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/crash" - "github.com/alcionai/corso/src/internal/connector" - "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/diagnostics" "github.com/alcionai/corso/src/internal/events" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" "github.com/alcionai/corso/src/internal/observe" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/internal/stats" "github.com/alcionai/corso/src/internal/streamstore" "github.com/alcionai/corso/src/pkg/account" @@ -42,6 +41,7 @@ type BackupOperation struct { Version string `json:"version"` account account.Account + bp inject.BackupProducer // when true, this allows for incremental backups instead of full data pulls incremental bool @@ -60,20 +60,21 @@ func NewBackupOperation( opts control.Options, kw *kopia.Wrapper, sw *store.Wrapper, - gc *connector.GraphConnector, + bp inject.BackupProducer, acct account.Account, selector selectors.Selector, ownerName string, bus events.Eventer, ) (BackupOperation, error) { op := BackupOperation{ - operation: newOperation(opts, bus, kw, sw, gc), + operation: newOperation(opts, bus, kw, sw), ResourceOwner: selector.DiscreteOwner, ResourceOwnerName: ownerName, Selectors: selector, Version: "v0", account: acct, incremental: useIncrementalBackup(selector, opts), + bp: bp, } if len(ownerName) == 0 { @@ -92,6 +93,10 @@ func (op BackupOperation) validate() error { return clues.New("backup requires a resource owner") } + if op.bp == nil { + return clues.New("missing backup producer") + } + return op.operation.validate() } @@ -101,7 +106,7 @@ func (op BackupOperation) validate() error { // get populated asynchronously. type backupStats struct { k *kopia.BackupStats - gc *support.ConnectorOperationStatus + gc *data.CollectionStats resourceCount int } @@ -243,14 +248,22 @@ func (op *BackupOperation) do( return nil, clues.Wrap(err, "producing manifests and metadata") } - cs, excludes, err := produceBackupDataCollections(ctx, op.gc, op.Selectors, mdColls, op.Options, op.Errors) + cs, excludes, err := produceBackupDataCollections( + ctx, + op.bp, + op.ResourceOwner, + op.ResourceOwnerName, + op.Selectors, + mdColls, + op.Options, + op.Errors) if err != nil { return nil, clues.Wrap(err, "producing backup data collections") } ctx = clues.Add(ctx, "coll_count", len(cs)) - writeStats, deets, toMerge, err := consumeBackupDataCollections( + writeStats, deets, toMerge, err := consumeBackupCollections( ctx, op.kopia, op.account.ID(), @@ -279,9 +292,9 @@ func (op *BackupOperation) do( return nil, clues.Wrap(err, "merging details") } - opStats.gc = op.gc.AwaitStatus() + opStats.gc = op.bp.Wait() - logger.Ctx(ctx).Debug(op.gc.PrintableStatus()) + logger.Ctx(ctx).Debug(opStats.gc) return deets, nil } @@ -312,7 +325,8 @@ func useIncrementalBackup(sel selectors.Selector, opts control.Options) bool { // calls the producer to generate collections of data to backup func produceBackupDataCollections( ctx context.Context, - gc *connector.GraphConnector, + bp inject.BackupProducer, + ownerID, ownerName string, sel selectors.Selector, metadata []data.RestoreCollection, ctrlOpts control.Options, @@ -325,25 +339,13 @@ func produceBackupDataCollections( closer() }() - return gc.DataCollections(ctx, sel, metadata, ctrlOpts, errs) + return bp.ProduceBackupCollections(ctx, ownerID, ownerName, sel, metadata, ctrlOpts, errs) } // --------------------------------------------------------------------------- // Consumer funcs // --------------------------------------------------------------------------- -type backuper interface { - BackupCollections( - ctx context.Context, - bases []kopia.IncrementalBase, - cs []data.BackupCollection, - excluded map[string]map[string]struct{}, - tags map[string]string, - buildTreeWithBase bool, - errs *fault.Bus, - ) (*kopia.BackupStats, *details.Builder, map[string]kopia.PrevRefs, error) -} - func selectorToReasons(sel selectors.Selector) []kopia.Reason { service := sel.PathService() reasons := []kopia.Reason{} @@ -389,9 +391,9 @@ func builderFromReason(ctx context.Context, tenant string, r kopia.Reason) (*pat } // calls kopia to backup the collections of data -func consumeBackupDataCollections( +func consumeBackupCollections( ctx context.Context, - bu backuper, + bc inject.BackupConsumer, tenantID string, reasons []kopia.Reason, mans []*kopia.ManifestEntry, @@ -465,7 +467,7 @@ func consumeBackupDataCollections( "base_backup_id", mbID) } - kopiaStats, deets, itemsSourcedFromBase, err := bu.BackupCollections( + kopiaStats, deets, itemsSourcedFromBase, err := bc.ConsumeBackupCollections( ctx, bases, cs, @@ -663,11 +665,11 @@ func (op *BackupOperation) persistResults( return clues.New("backup population never completed") } - if op.Status != Failed && opStats.gc.Metrics.Successes == 0 { + if op.Status != Failed && opStats.gc.IsZero() { op.Status = NoData } - op.Results.ItemsRead = opStats.gc.Metrics.Successes + op.Results.ItemsRead = opStats.gc.Successes return op.Errors.Failure() } diff --git a/src/internal/operations/backup_integration_test.go b/src/internal/operations/backup_integration_test.go index 3ae3d8a72..744a87837 100644 --- a/src/internal/operations/backup_integration_test.go +++ b/src/internal/operations/backup_integration_test.go @@ -30,6 +30,7 @@ import ( evmock "github.com/alcionai/corso/src/internal/events/mock" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/version" "github.com/alcionai/corso/src/pkg/account" @@ -288,7 +289,7 @@ func checkMetadataFilesExist( pathsByRef[dir.ShortRef()] = append(pathsByRef[dir.ShortRef()], fName) } - cols, err := kw.RestoreMultipleItems(ctx, bup.SnapshotID, paths, nil, fault.New(true)) + cols, err := kw.ProduceRestoreCollections(ctx, bup.SnapshotID, paths, nil, fault.New(true)) assert.NoError(t, err, clues.ToCore(err)) for _, col := range cols { @@ -383,7 +384,7 @@ func generateContainerOfItems( dest, collections) - deets, err := gc.RestoreDataCollections( + deets, err := gc.ConsumeRestoreCollections( ctx, backupVersion, acct, @@ -394,7 +395,9 @@ func generateContainerOfItems( fault.New(true)) require.NoError(t, err, clues.ToCore(err)) - gc.AwaitStatus() + // have to wait here, both to ensure the process + // finishes, and also to clean up the gc status + gc.Wait() return deets } @@ -539,7 +542,7 @@ func (suite *BackupOpIntegrationSuite) SetupSuite() { func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() { kw := &kopia.Wrapper{} sw := &store.Wrapper{} - gc := &connector.GraphConnector{} + gc := &mockconnector.GraphConnector{} acct := tester.NewM365Account(suite.T()) table := []struct { @@ -547,7 +550,7 @@ func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() { opts control.Options kw *kopia.Wrapper sw *store.Wrapper - gc *connector.GraphConnector + bp inject.BackupProducer acct account.Account targets []string errCheck assert.ErrorAssertionFunc @@ -555,7 +558,7 @@ func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() { {"good", control.Options{}, kw, sw, gc, acct, nil, assert.NoError}, {"missing kopia", control.Options{}, nil, sw, gc, acct, nil, assert.Error}, {"missing modelstore", control.Options{}, kw, nil, gc, acct, nil, assert.Error}, - {"missing graphconnector", control.Options{}, kw, sw, nil, acct, nil, assert.Error}, + {"missing backup producer", control.Options{}, kw, sw, nil, acct, nil, assert.Error}, } for _, test := range table { suite.Run(test.name, func() { @@ -567,7 +570,7 @@ func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() { test.opts, test.kw, test.sw, - test.gc, + test.bp, test.acct, selectors.Selector{DiscreteOwner: "test"}, "test-name", diff --git a/src/internal/operations/backup_test.go b/src/internal/operations/backup_test.go index 74641704a..96f9de9c7 100644 --- a/src/internal/operations/backup_test.go +++ b/src/internal/operations/backup_test.go @@ -14,8 +14,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "github.com/alcionai/corso/src/internal/connector" - "github.com/alcionai/corso/src/internal/connector/support" + "github.com/alcionai/corso/src/internal/connector/mockconnector" "github.com/alcionai/corso/src/internal/data" evmock "github.com/alcionai/corso/src/internal/events/mock" "github.com/alcionai/corso/src/internal/kopia" @@ -38,7 +37,7 @@ import ( // ----- restore producer -type mockRestorer struct { +type mockRestoreProducer struct { gotPaths []path.Path colls []data.RestoreCollection collsByID map[string][]data.RestoreCollection // snapshotID: []RestoreCollection @@ -48,7 +47,7 @@ type mockRestorer struct { type restoreFunc func(id string, ps []path.Path) ([]data.RestoreCollection, error) -func (mr *mockRestorer) buildRestoreFunc( +func (mr *mockRestoreProducer) buildRestoreFunc( t *testing.T, oid string, ops []path.Path, @@ -61,7 +60,7 @@ func (mr *mockRestorer) buildRestoreFunc( } } -func (mr *mockRestorer) RestoreMultipleItems( +func (mr *mockRestoreProducer) ProduceRestoreCollections( ctx context.Context, snapshotID string, paths []path.Path, @@ -85,9 +84,9 @@ func checkPaths(t *testing.T, expected, got []path.Path) { assert.ElementsMatch(t, expected, got) } -// ----- backup producer +// ----- backup consumer -type mockBackuper struct { +type mockBackupConsumer struct { checkFunc func( bases []kopia.IncrementalBase, cs []data.BackupCollection, @@ -95,7 +94,7 @@ type mockBackuper struct { buildTreeWithBase bool) } -func (mbu mockBackuper) BackupCollections( +func (mbu mockBackupConsumer) ConsumeBackupCollections( ctx context.Context, bases []kopia.IncrementalBase, cs []data.BackupCollection, @@ -360,7 +359,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() { var ( kw = &kopia.Wrapper{} sw = &store.Wrapper{} - gc = &connector.GraphConnector{} + gc = &mockconnector.GraphConnector{} acct = account.Account{} now = time.Now() ) @@ -381,9 +380,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() { TotalHashedBytes: 1, TotalUploadedBytes: 1, }, - gc: &support.ConnectorOperationStatus{ - Metrics: support.CollectionMetrics{Successes: 1}, - }, + gc: &data.CollectionStats{Successes: 1}, }, }, { @@ -392,7 +389,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() { fail: assert.AnError, stats: backupStats{ k: &kopia.BackupStats{}, - gc: &support.ConnectorOperationStatus{}, + gc: &data.CollectionStats{}, }, }, { @@ -400,7 +397,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() { expectErr: assert.NoError, stats: backupStats{ k: &kopia.BackupStats{}, - gc: &support.ConnectorOperationStatus{}, + gc: &data.CollectionStats{}, }, }, } @@ -427,7 +424,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() { test.expectErr(t, op.persistResults(now, &test.stats)) assert.Equal(t, test.expectStatus.String(), op.Status.String(), "status") - assert.Equal(t, test.stats.gc.Metrics.Successes, op.Results.ItemsRead, "items read") + assert.Equal(t, test.stats.gc.Successes, op.Results.ItemsRead, "items read") assert.Equal(t, test.stats.k.TotalFileCount, op.Results.ItemsWritten, "items written") assert.Equal(t, test.stats.k.TotalHashedBytes, op.Results.BytesRead, "bytes read") assert.Equal(t, test.stats.k.TotalUploadedBytes, op.Results.BytesUploaded, "bytes written") @@ -564,7 +561,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_ConsumeBackupDataCollections ctx, flush := tester.NewContext() defer flush() - mbu := &mockBackuper{ + mbu := &mockBackupConsumer{ checkFunc: func( bases []kopia.IncrementalBase, cs []data.BackupCollection, @@ -576,7 +573,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_ConsumeBackupDataCollections } //nolint:errcheck - consumeBackupDataCollections( + consumeBackupCollections( ctx, mbu, tenant, diff --git a/src/internal/operations/inject/inject.go b/src/internal/operations/inject/inject.go new file mode 100644 index 000000000..dfc0c8cab --- /dev/null +++ b/src/internal/operations/inject/inject.go @@ -0,0 +1,66 @@ +package inject + +import ( + "context" + + "github.com/alcionai/corso/src/internal/data" + "github.com/alcionai/corso/src/internal/kopia" + "github.com/alcionai/corso/src/pkg/account" + "github.com/alcionai/corso/src/pkg/backup/details" + "github.com/alcionai/corso/src/pkg/control" + "github.com/alcionai/corso/src/pkg/fault" + "github.com/alcionai/corso/src/pkg/path" + "github.com/alcionai/corso/src/pkg/selectors" +) + +type ( + BackupProducer interface { + ProduceBackupCollections( + ctx context.Context, + ownerID, ownerName string, + sels selectors.Selector, + metadata []data.RestoreCollection, + ctrlOpts control.Options, + errs *fault.Bus, + ) ([]data.BackupCollection, map[string]map[string]struct{}, error) + + Wait() *data.CollectionStats + } + + BackupConsumer interface { + ConsumeBackupCollections( + ctx context.Context, + bases []kopia.IncrementalBase, + cs []data.BackupCollection, + excluded map[string]map[string]struct{}, + tags map[string]string, + buildTreeWithBase bool, + errs *fault.Bus, + ) (*kopia.BackupStats, *details.Builder, map[string]kopia.PrevRefs, error) + } + + RestoreProducer interface { + ProduceRestoreCollections( + ctx context.Context, + snapshotID string, + paths []path.Path, + bc kopia.ByteCounter, + errs *fault.Bus, + ) ([]data.RestoreCollection, error) + } + + RestoreConsumer interface { + ConsumeRestoreCollections( + ctx context.Context, + backupVersion int, + acct account.Account, + selector selectors.Selector, + dest control.RestoreDestination, + opts control.Options, + dcs []data.RestoreCollection, + errs *fault.Bus, + ) (*details.Details, error) + + Wait() *data.CollectionStats + } +) diff --git a/src/internal/operations/manifests.go b/src/internal/operations/manifests.go index b4505c915..f8f2c5041 100644 --- a/src/internal/operations/manifests.go +++ b/src/internal/operations/manifests.go @@ -11,6 +11,7 @@ import ( "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/pkg/backup" "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/logger" @@ -27,7 +28,7 @@ type manifestFetcher interface { type manifestRestorer interface { manifestFetcher - restorer + inject.RestoreProducer } type getBackuper interface { @@ -173,7 +174,7 @@ func verifyDistinctBases(ctx context.Context, mans []*kopia.ManifestEntry) error // collectMetadata retrieves all metadata files associated with the manifest. func collectMetadata( ctx context.Context, - r restorer, + r inject.RestoreProducer, man *kopia.ManifestEntry, fileNames []string, tenantID string, @@ -201,7 +202,7 @@ func collectMetadata( } } - dcs, err := r.RestoreMultipleItems(ctx, string(man.ID), paths, nil, errs) + dcs, err := r.ProduceRestoreCollections(ctx, string(man.ID), paths, nil, errs) if err != nil { // Restore is best-effort and we want to keep it that way since we want to // return as much metadata as we can to reduce the work we'll need to do. diff --git a/src/internal/operations/manifests_test.go b/src/internal/operations/manifests_test.go index df0c54632..9f2a3b409 100644 --- a/src/internal/operations/manifests_test.go +++ b/src/internal/operations/manifests_test.go @@ -24,9 +24,9 @@ import ( // --------------------------------------------------------------------------- type mockManifestRestorer struct { - mockRestorer + mockRestoreProducer mans []*kopia.ManifestEntry - mrErr error // err varname already claimed by mockRestorer + mrErr error // err varname already claimed by mockRestoreProducer } func (mmr mockManifestRestorer) FetchPrevSnapshotManifests( @@ -225,7 +225,7 @@ func (suite *OperationsManifestsUnitSuite) TestCollectMetadata() { paths := test.expectPaths(t, test.fileNames) - mr := mockRestorer{err: test.expectErr} + mr := mockRestoreProducer{err: test.expectErr} mr.buildRestoreFunc(t, test.manID, paths) man := &kopia.ManifestEntry{ @@ -447,8 +447,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "don't get metadata, no mans", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, - mans: []*kopia.ManifestEntry{}, + mockRestoreProducer: mockRestoreProducer{}, + mans: []*kopia.ManifestEntry{}, }, gb: mockGetBackuper{detailsID: did}, reasons: []kopia.Reason{}, @@ -460,8 +460,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "don't get metadata", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, - mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "", "")}, + mockRestoreProducer: mockRestoreProducer{}, + mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "", "")}, }, gb: mockGetBackuper{detailsID: did}, reasons: []kopia.Reason{}, @@ -473,8 +473,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "don't get metadata, incomplete manifest", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, - mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "ir", "")}, + mockRestoreProducer: mockRestoreProducer{}, + mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "ir", "")}, }, gb: mockGetBackuper{detailsID: did}, reasons: []kopia.Reason{}, @@ -486,8 +486,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "fetch manifests errors", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, - mrErr: assert.AnError, + mockRestoreProducer: mockRestoreProducer{}, + mrErr: assert.AnError, }, gb: mockGetBackuper{detailsID: did}, reasons: []kopia.Reason{}, @@ -499,7 +499,7 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "verify distinct bases fails", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, + mockRestoreProducer: mockRestoreProducer{}, mans: []*kopia.ManifestEntry{ makeMan(path.EmailCategory, "", "", ""), makeMan(path.EmailCategory, "", "", ""), @@ -515,8 +515,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "no manifests", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, - mans: []*kopia.ManifestEntry{}, + mockRestoreProducer: mockRestoreProducer{}, + mans: []*kopia.ManifestEntry{}, }, gb: mockGetBackuper{detailsID: did}, reasons: []kopia.Reason{}, @@ -528,7 +528,7 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "only incomplete manifests", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, + mockRestoreProducer: mockRestoreProducer{}, mans: []*kopia.ManifestEntry{ makeMan(path.EmailCategory, "", "ir", ""), makeMan(path.ContactsCategory, "", "ir", ""), @@ -544,9 +544,11 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "man missing backup id", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{collsByID: map[string][]data.RestoreCollection{ - "id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "id_coll"}}}, - }}, + mockRestoreProducer: mockRestoreProducer{ + collsByID: map[string][]data.RestoreCollection{ + "id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "id_coll"}}}, + }, + }, mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "id", "", "")}, }, gb: mockGetBackuper{detailsID: did}, @@ -559,8 +561,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "backup missing details id", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{}, - mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "", "bid")}, + mockRestoreProducer: mockRestoreProducer{}, + mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "", "bid")}, }, gb: mockGetBackuper{}, reasons: []kopia.Reason{}, @@ -571,10 +573,12 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "one complete, one incomplete", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{collsByID: map[string][]data.RestoreCollection{ - "id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "id_coll"}}}, - "incmpl_id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "incmpl_id_coll"}}}, - }}, + mockRestoreProducer: mockRestoreProducer{ + collsByID: map[string][]data.RestoreCollection{ + "id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "id_coll"}}}, + "incmpl_id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "incmpl_id_coll"}}}, + }, + }, mans: []*kopia.ManifestEntry{ makeMan(path.EmailCategory, "id", "", "bid"), makeMan(path.EmailCategory, "incmpl_id", "ir", ""), @@ -590,9 +594,11 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "single valid man", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{collsByID: map[string][]data.RestoreCollection{ - "id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "id_coll"}}}, - }}, + mockRestoreProducer: mockRestoreProducer{ + collsByID: map[string][]data.RestoreCollection{ + "id": {data.NotFoundRestoreCollection{Collection: mockColl{id: "id_coll"}}}, + }, + }, mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "id", "", "bid")}, }, gb: mockGetBackuper{detailsID: did}, @@ -605,10 +611,12 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "multiple valid mans", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{collsByID: map[string][]data.RestoreCollection{ - "mail": {data.NotFoundRestoreCollection{Collection: mockColl{id: "mail_coll"}}}, - "contact": {data.NotFoundRestoreCollection{Collection: mockColl{id: "contact_coll"}}}, - }}, + mockRestoreProducer: mockRestoreProducer{ + collsByID: map[string][]data.RestoreCollection{ + "mail": {data.NotFoundRestoreCollection{Collection: mockColl{id: "mail_coll"}}}, + "contact": {data.NotFoundRestoreCollection{Collection: mockColl{id: "contact_coll"}}}, + }, + }, mans: []*kopia.ManifestEntry{ makeMan(path.EmailCategory, "mail", "", "bid"), makeMan(path.ContactsCategory, "contact", "", "bid"), @@ -627,8 +635,8 @@ func (suite *OperationsManifestsUnitSuite) TestProduceManifestsAndMetadata() { { name: "error collecting metadata", mr: mockManifestRestorer{ - mockRestorer: mockRestorer{err: assert.AnError}, - mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "", "bid")}, + mockRestoreProducer: mockRestoreProducer{err: assert.AnError}, + mans: []*kopia.ManifestEntry{makeMan(path.EmailCategory, "", "", "bid")}, }, gb: mockGetBackuper{detailsID: did}, reasons: []kopia.Reason{}, @@ -961,7 +969,7 @@ func (suite *BackupManifestUnitSuite) TestBackupOperation_CollectMetadata() { ctx, flush := tester.NewContext() defer flush() - mr := &mockRestorer{} + mr := &mockRestoreProducer{} _, err := collectMetadata(ctx, mr, test.inputMan, test.inputFiles, tenant, fault.New(true)) assert.NoError(t, err, clues.ToCore(err)) diff --git a/src/internal/operations/operation.go b/src/internal/operations/operation.go index 8dc27c87a..e4cd201db 100644 --- a/src/internal/operations/operation.go +++ b/src/internal/operations/operation.go @@ -5,7 +5,6 @@ import ( "github.com/alcionai/clues" - "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/events" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/pkg/control" @@ -57,7 +56,6 @@ type operation struct { bus events.Eventer kopia *kopia.Wrapper store *store.Wrapper - gc *connector.GraphConnector } func newOperation( @@ -65,7 +63,6 @@ func newOperation( bus events.Eventer, kw *kopia.Wrapper, sw *store.Wrapper, - gc *connector.GraphConnector, ) operation { return operation{ CreatedAt: time.Now(), @@ -75,7 +72,6 @@ func newOperation( bus: bus, kopia: kw, store: sw, - gc: gc, Status: InProgress, } @@ -90,9 +86,5 @@ func (op operation) validate() error { return clues.New("missing modelstore") } - if op.gc == nil { - return clues.New("missing graph connector") - } - return nil } diff --git a/src/internal/operations/operation_test.go b/src/internal/operations/operation_test.go index 5d0425022..27cf6185f 100644 --- a/src/internal/operations/operation_test.go +++ b/src/internal/operations/operation_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/events" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/tester" @@ -26,30 +25,27 @@ func TestOperationSuite(t *testing.T) { func (suite *OperationSuite) TestNewOperation() { t := suite.T() - op := newOperation(control.Options{}, events.Bus{}, nil, nil, nil) + op := newOperation(control.Options{}, events.Bus{}, nil, nil) assert.Greater(t, op.CreatedAt, time.Time{}) } func (suite *OperationSuite) TestOperation_Validate() { kwStub := &kopia.Wrapper{} swStub := &store.Wrapper{} - gcStub := &connector.GraphConnector{} table := []struct { name string kw *kopia.Wrapper sw *store.Wrapper - gc *connector.GraphConnector errCheck assert.ErrorAssertionFunc }{ - {"good", kwStub, swStub, gcStub, assert.NoError}, - {"missing kopia wrapper", nil, swStub, gcStub, assert.Error}, - {"missing store wrapper", kwStub, nil, gcStub, assert.Error}, - {"missing graph connector", kwStub, swStub, nil, assert.Error}, + {"good", kwStub, swStub, assert.NoError}, + {"missing kopia wrapper", nil, swStub, assert.Error}, + {"missing store wrapper", kwStub, nil, assert.Error}, } for _, test := range table { suite.Run(test.name, func() { - err := newOperation(control.Options{}, events.Bus{}, test.kw, test.sw, test.gc).validate() + err := newOperation(control.Options{}, events.Bus{}, test.kw, test.sw).validate() test.errCheck(suite.T(), err, clues.ToCore(err)) }) } diff --git a/src/internal/operations/restore.go b/src/internal/operations/restore.go index 0365765af..1dac69098 100644 --- a/src/internal/operations/restore.go +++ b/src/internal/operations/restore.go @@ -10,15 +10,14 @@ import ( "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/crash" - "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/onedrive" - "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/diagnostics" "github.com/alcionai/corso/src/internal/events" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" "github.com/alcionai/corso/src/internal/observe" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/internal/stats" "github.com/alcionai/corso/src/internal/streamstore" "github.com/alcionai/corso/src/pkg/account" @@ -42,6 +41,7 @@ type RestoreOperation struct { Version string `json:"version"` account account.Account + rc inject.RestoreConsumer } // RestoreResults aggregate the details of the results of the operation. @@ -56,7 +56,7 @@ func NewRestoreOperation( opts control.Options, kw *kopia.Wrapper, sw *store.Wrapper, - gc *connector.GraphConnector, + rc inject.RestoreConsumer, acct account.Account, backupID model.StableID, sel selectors.Selector, @@ -64,12 +64,13 @@ func NewRestoreOperation( bus events.Eventer, ) (RestoreOperation, error) { op := RestoreOperation{ - operation: newOperation(opts, bus, kw, sw, gc), + operation: newOperation(opts, bus, kw, sw), BackupID: backupID, Selectors: sel, Destination: dest, Version: "v0", account: acct, + rc: rc, } if err := op.validate(); err != nil { return RestoreOperation{}, err @@ -79,6 +80,10 @@ func NewRestoreOperation( } func (op RestoreOperation) validate() error { + if op.rc == nil { + return clues.New("missing restore consumer") + } + return op.operation.validate() } @@ -88,7 +93,7 @@ func (op RestoreOperation) validate() error { // get populated asynchronously. type restoreStats struct { cs []data.RestoreCollection - gc *support.ConnectorOperationStatus + gc *data.CollectionStats bytesRead *stats.ByteCounter resourceCount int @@ -96,16 +101,6 @@ type restoreStats struct { restoreID string } -type restorer interface { - RestoreMultipleItems( - ctx context.Context, - snapshotID string, - paths []path.Path, - bc kopia.ByteCounter, - errs *fault.Bus, - ) ([]data.RestoreCollection, error) -} - // Run begins a synchronous restore operation. func (op *RestoreOperation) Run(ctx context.Context) (restoreDetails *details.Details, err error) { defer func() { @@ -222,7 +217,7 @@ func (op *RestoreOperation) do( defer closer() defer close(kopiaComplete) - dcs, err := op.kopia.RestoreMultipleItems(ctx, bup.SnapshotID, paths, opStats.bytesRead, op.Errors) + dcs, err := op.kopia.ProduceRestoreCollections(ctx, bup.SnapshotID, paths, opStats.bytesRead, op.Errors) if err != nil { return nil, clues.Wrap(err, "producing collections to restore") } @@ -235,12 +230,9 @@ func (op *RestoreOperation) do( opStats.resourceCount = 1 opStats.cs = dcs - restoreComplete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Restoring data")) - defer closer() - defer close(restoreComplete) - - restoreDetails, err := op.gc.RestoreDataCollections( + deets, err = consumeRestoreCollections( ctx, + op.rc, bup.Version, op.account, op.Selectors, @@ -252,13 +244,11 @@ func (op *RestoreOperation) do( return nil, clues.Wrap(err, "restoring collections") } - restoreComplete <- struct{}{} + opStats.gc = op.rc.Wait() - opStats.gc = op.gc.AwaitStatus() + logger.Ctx(ctx).Debug(opStats.gc) - logger.Ctx(ctx).Debug(op.gc.PrintableStatus()) - - return restoreDetails, nil + return deets, nil } // persists details and statistics about the restore operation. @@ -285,11 +275,11 @@ func (op *RestoreOperation) persistResults( return clues.New("restoration never completed") } - if op.Status != Failed && opStats.gc.Metrics.Successes == 0 { + if op.Status != Failed && opStats.gc.IsZero() { op.Status = NoData } - op.Results.ItemsWritten = opStats.gc.Metrics.Successes + op.Results.ItemsWritten = opStats.gc.Successes op.bus.Event( ctx, @@ -312,6 +302,44 @@ func (op *RestoreOperation) persistResults( return op.Errors.Failure() } +// --------------------------------------------------------------------------- +// Restorer funcs +// --------------------------------------------------------------------------- + +func consumeRestoreCollections( + ctx context.Context, + rc inject.RestoreConsumer, + backupVersion int, + acct account.Account, + sel selectors.Selector, + dest control.RestoreDestination, + opts control.Options, + dcs []data.RestoreCollection, + errs *fault.Bus, +) (*details.Details, error) { + complete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Restoring data")) + defer func() { + complete <- struct{}{} + close(complete) + closer() + }() + + deets, err := rc.ConsumeRestoreCollections( + ctx, + backupVersion, + acct, + sel, + dest, + opts, + dcs, + errs) + if err != nil { + return nil, clues.Wrap(err, "restoring collections") + } + + return deets, nil +} + // formatDetailsForRestoration reduces the provided detail entries according to the // selector specifications. func formatDetailsForRestoration( diff --git a/src/internal/operations/restore_test.go b/src/internal/operations/restore_test.go index 0ffbf587e..4344e08ee 100644 --- a/src/internal/operations/restore_test.go +++ b/src/internal/operations/restore_test.go @@ -16,12 +16,12 @@ import ( "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/mockconnector" "github.com/alcionai/corso/src/internal/connector/onedrive/api" - "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/events" evmock "github.com/alcionai/corso/src/internal/events/mock" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/internal/stats" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/account" @@ -50,7 +50,7 @@ func (suite *RestoreOpSuite) TestRestoreOperation_PersistResults() { var ( kw = &kopia.Wrapper{} sw = &store.Wrapper{} - gc = &connector.GraphConnector{} + gc = &mockconnector.GraphConnector{} acct = account.Account{} now = time.Now() dest = tester.DefaultTestRestoreDestination() @@ -75,11 +75,9 @@ func (suite *RestoreOpSuite) TestRestoreOperation_PersistResults() { Collection: &mockconnector.MockExchangeDataCollection{}, }, }, - gc: &support.ConnectorOperationStatus{ - Metrics: support.CollectionMetrics{ - Objects: 1, - Successes: 1, - }, + gc: &data.CollectionStats{ + Objects: 1, + Successes: 1, }, }, }, @@ -89,7 +87,7 @@ func (suite *RestoreOpSuite) TestRestoreOperation_PersistResults() { fail: assert.AnError, stats: restoreStats{ bytesRead: &stats.ByteCounter{}, - gc: &support.ConnectorOperationStatus{}, + gc: &data.CollectionStats{}, }, }, { @@ -98,7 +96,7 @@ func (suite *RestoreOpSuite) TestRestoreOperation_PersistResults() { stats: restoreStats{ bytesRead: &stats.ByteCounter{}, cs: []data.RestoreCollection{}, - gc: &support.ConnectorOperationStatus{}, + gc: &data.CollectionStats{}, }, }, } @@ -126,7 +124,7 @@ func (suite *RestoreOpSuite) TestRestoreOperation_PersistResults() { assert.Equal(t, test.expectStatus.String(), op.Status.String(), "status") assert.Equal(t, len(test.stats.cs), op.Results.ItemsRead, "items read") - assert.Equal(t, test.stats.gc.Metrics.Successes, op.Results.ItemsWritten, "items written") + assert.Equal(t, test.stats.gc.Successes, op.Results.ItemsWritten, "items written") assert.Equal(t, test.stats.bytesRead.NumBytes, op.Results.BytesRead, "resource owners") assert.Equal(t, test.stats.resourceCount, op.Results.ResourceOwners, "resource owners") assert.Equal(t, now, op.Results.StartedAt, "started at") @@ -217,7 +215,7 @@ func (suite *RestoreOpIntegrationSuite) TearDownSuite() { func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() { kw := &kopia.Wrapper{} sw := &store.Wrapper{} - gc := &connector.GraphConnector{} + gc := &mockconnector.GraphConnector{} acct := tester.NewM365Account(suite.T()) dest := tester.DefaultTestRestoreDestination() @@ -226,7 +224,7 @@ func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() { opts control.Options kw *kopia.Wrapper sw *store.Wrapper - gc *connector.GraphConnector + rc inject.RestoreConsumer acct account.Account targets []string errCheck assert.ErrorAssertionFunc @@ -234,7 +232,7 @@ func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() { {"good", control.Options{}, kw, sw, gc, acct, nil, assert.NoError}, {"missing kopia", control.Options{}, nil, sw, gc, acct, nil, assert.Error}, {"missing modelstore", control.Options{}, kw, nil, gc, acct, nil, assert.Error}, - {"missing graphConnector", control.Options{}, kw, sw, nil, acct, nil, assert.Error}, + {"missing restore consumer", control.Options{}, kw, sw, nil, acct, nil, assert.Error}, } for _, test := range table { suite.Run(test.name, func() { @@ -246,7 +244,7 @@ func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() { test.opts, test.kw, test.sw, - test.gc, + test.rc, test.acct, "backup-id", selectors.Selector{DiscreteOwner: "test"}, diff --git a/src/internal/streamstore/streamstore.go b/src/internal/streamstore/streamstore.go index ec728df67..57fe5b8f1 100644 --- a/src/internal/streamstore/streamstore.go +++ b/src/internal/streamstore/streamstore.go @@ -11,8 +11,8 @@ import ( "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/kopia" + "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/internal/stats" - "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/path" ) @@ -221,26 +221,14 @@ func collect( return &dc, nil } -type backuper interface { - BackupCollections( - ctx context.Context, - bases []kopia.IncrementalBase, - cs []data.BackupCollection, - globalExcludeSet map[string]map[string]struct{}, - tags map[string]string, - buildTreeWithBase bool, - errs *fault.Bus, - ) (*kopia.BackupStats, *details.Builder, map[string]kopia.PrevRefs, error) -} - // write persists bytes to the store func write( ctx context.Context, - bup backuper, + bup inject.BackupConsumer, dbcs []data.BackupCollection, errs *fault.Bus, ) (string, error) { - backupStats, _, _, err := bup.BackupCollections( + backupStats, _, _, err := bup.ConsumeBackupCollections( ctx, nil, dbcs, @@ -255,16 +243,6 @@ func write( return backupStats.SnapshotID, nil } -type restorer interface { - RestoreMultipleItems( - ctx context.Context, - snapshotID string, - paths []path.Path, - bc kopia.ByteCounter, - errs *fault.Bus, - ) ([]data.RestoreCollection, error) -} - // read retrieves an object from the store func read( ctx context.Context, @@ -272,7 +250,7 @@ func read( tenantID string, service path.ServiceType, col Collectable, - rer restorer, + rer inject.RestoreProducer, errs *fault.Bus, ) error { // construct the path of the container @@ -285,7 +263,7 @@ func read( ctx = clues.Add(ctx, "snapshot_id", snapshotID) - cs, err := rer.RestoreMultipleItems( + cs, err := rer.ProduceRestoreCollections( ctx, snapshotID, []path.Path{p}, From 6190b1ba051ef06590b4bcb184c28e032d67b64e Mon Sep 17 00:00:00 2001 From: Keepers Date: Fri, 31 Mar 2023 10:36:19 -0600 Subject: [PATCH 03/37] use equalfold in filter equals checks (#2995) Because it's nifty. ----- #### Type of change - [x] :broom: Tech Debt/Cleanup --- src/internal/operations/backup_integration_test.go | 1 - src/pkg/filters/filters.go | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/internal/operations/backup_integration_test.go b/src/internal/operations/backup_integration_test.go index 744a87837..2de42ee31 100644 --- a/src/internal/operations/backup_integration_test.go +++ b/src/internal/operations/backup_integration_test.go @@ -1098,7 +1098,6 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_exchangeIncrementals() { } for _, test := range table { suite.Run(test.name, func() { - fmt.Printf("\n-----\ntest %+v\n-----\n", test.name) var ( t = suite.T() incMB = evmock.NewBus() diff --git a/src/pkg/filters/filters.go b/src/pkg/filters/filters.go index 8a2504f27..e05134592 100644 --- a/src/pkg/filters/filters.go +++ b/src/pkg/filters/filters.go @@ -444,7 +444,7 @@ func (f Filter) Compare(input string) bool { // true if t == i func equals(target, input string) bool { - return target == input + return strings.EqualFold(target, input) } // true if t > i @@ -531,7 +531,7 @@ func pathSuffix(target, input string) bool { // The input is assumed to be the complete path that may // match the target. func pathEquals(target, input string) bool { - return normPathElem(input) == target + return strings.EqualFold(normPathElem(input), target) } // ---------------------------------------------------------------------------------------------------- From f574fc972930276f889f25652d0f1a388a07ed7e Mon Sep 17 00:00:00 2001 From: Keepers Date: Fri, 31 Mar 2023 11:50:40 -0600 Subject: [PATCH 04/37] remove model.StableID from repository iface (#2997) model.StableID is an internal value. SDK facing interfaces should only need to provide strings. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Test Plan - [x] :muscle: Manual - [x] :zap: Unit test - [x] :green_heart: E2E --- src/cli/backup/backup.go | 7 +++---- src/cli/backup/exchange_e2e_test.go | 2 +- src/cli/restore/exchange_e2e_test.go | 2 +- src/cli/utils/testdata/opts.go | 5 ++--- src/pkg/repository/repository.go | 22 ++++++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/cli/backup/backup.go b/src/cli/backup/backup.go index f407f084f..09af8b966 100644 --- a/src/cli/backup/backup.go +++ b/src/cli/backup/backup.go @@ -14,7 +14,6 @@ import ( . "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/internal/data" - "github.com/alcionai/corso/src/internal/model" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/backup" "github.com/alcionai/corso/src/pkg/logger" @@ -197,7 +196,7 @@ func runBackups( selectorSet []selectors.Selector, ) error { var ( - bIDs []model.StableID + bIDs []string errs = []error{} ) @@ -223,7 +222,7 @@ func runBackups( continue } - bIDs = append(bIDs, bo.Results.BackupID) + bIDs = append(bIDs, string(bo.Results.BackupID)) Infof(ctx, "Done - ID: %v\n", bo.Results.BackupID) } @@ -265,7 +264,7 @@ func genericDeleteCommand(cmd *cobra.Command, bID, designation string, args []st defer utils.CloseRepo(ctx, r) - if err := r.DeleteBackup(ctx, model.StableID(bID)); err != nil { + if err := r.DeleteBackup(ctx, bID); err != nil { return Only(ctx, clues.Wrap(err, "Deleting backup "+bID)) } diff --git a/src/cli/backup/exchange_e2e_test.go b/src/cli/backup/exchange_e2e_test.go index f25e0ecfd..cce596f10 100644 --- a/src/cli/backup/exchange_e2e_test.go +++ b/src/cli/backup/exchange_e2e_test.go @@ -330,7 +330,7 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { bIDs := string(bop.Results.BackupID) // sanity check, ensure we can find the backup and its details immediately - b, err := suite.repo.Backup(ctx, bop.Results.BackupID) + b, err := suite.repo.Backup(ctx, string(bop.Results.BackupID)) require.NoError(t, err, "retrieving recent backup by ID") require.Equal(t, bIDs, string(b.ID), "repo backup matches results id") _, b, errs := suite.repo.GetBackupDetails(ctx, bIDs) diff --git a/src/cli/restore/exchange_e2e_test.go b/src/cli/restore/exchange_e2e_test.go index 2c03fd6bb..497f5ae70 100644 --- a/src/cli/restore/exchange_e2e_test.go +++ b/src/cli/restore/exchange_e2e_test.go @@ -109,7 +109,7 @@ func (suite *RestoreExchangeE2ESuite) SetupSuite() { suite.backupOps[set] = bop // sanity check, ensure we can find the backup and its details immediately - _, err = suite.repo.Backup(ctx, bop.Results.BackupID) + _, err = suite.repo.Backup(ctx, string(bop.Results.BackupID)) require.NoError(t, err, "retrieving recent backup by ID", clues.ToCore(err)) _, _, errs := suite.repo.GetBackupDetails(ctx, string(bop.Results.BackupID)) diff --git a/src/cli/utils/testdata/opts.go b/src/cli/utils/testdata/opts.go index 413be011b..d3ce9915c 100644 --- a/src/cli/utils/testdata/opts.go +++ b/src/cli/utils/testdata/opts.go @@ -8,7 +8,6 @@ import ( "github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/internal/common" - "github.com/alcionai/corso/src/internal/model" "github.com/alcionai/corso/src/pkg/backup" "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/backup/details/testdata" @@ -559,14 +558,14 @@ type MockBackupGetter struct { func (MockBackupGetter) Backup( context.Context, - model.StableID, + string, ) (*backup.Backup, error) { return nil, clues.New("unexpected call to mock") } func (MockBackupGetter) Backups( context.Context, - []model.StableID, + []string, ) ([]*backup.Backup, *fault.Bus) { return nil, fault.New(false).Fail(clues.New("unexpected call to mock")) } diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index d2c6e3aaa..10a910bf3 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -35,8 +35,8 @@ var ErrorRepoAlreadyExists = clues.New("a repository was already initialized wit // BackupGetter deals with retrieving metadata about backups from the // repository. type BackupGetter interface { - Backup(ctx context.Context, id model.StableID) (*backup.Backup, error) - Backups(ctx context.Context, ids []model.StableID) ([]*backup.Backup, *fault.Bus) + Backup(ctx context.Context, id string) (*backup.Backup, error) + Backups(ctx context.Context, ids []string) ([]*backup.Backup, *fault.Bus) BackupsByTag(ctx context.Context, fs ...store.FilterOption) ([]*backup.Backup, error) GetBackupDetails( ctx context.Context, @@ -61,7 +61,7 @@ type Repository interface { sel selectors.Selector, dest control.RestoreDestination, ) (operations.RestoreOperation, error) - DeleteBackup(ctx context.Context, id model.StableID) error + DeleteBackup(ctx context.Context, id string) error BackupGetter } @@ -330,14 +330,14 @@ func (r repository) NewRestore( } // backups lists a backup by id -func (r repository) Backup(ctx context.Context, id model.StableID) (*backup.Backup, error) { +func (r repository) Backup(ctx context.Context, id string) (*backup.Backup, error) { sw := store.NewKopiaStore(r.modelStore) - return sw.GetBackup(ctx, id) + return sw.GetBackup(ctx, model.StableID(id)) } // BackupsByID lists backups by ID. Returns as many backups as possible with // errors for the backups it was unable to retrieve. -func (r repository) Backups(ctx context.Context, ids []model.StableID) ([]*backup.Backup, *fault.Bus) { +func (r repository) Backups(ctx context.Context, ids []string) ([]*backup.Backup, *fault.Bus) { var ( bups []*backup.Backup errs = fault.New(false) @@ -345,9 +345,11 @@ func (r repository) Backups(ctx context.Context, ids []model.StableID) ([]*backu ) for _, id := range ids { - b, err := sw.GetBackup(ctx, id) + ictx := clues.Add(ctx, "backup_id", id) + + b, err := sw.GetBackup(ictx, model.StableID(id)) if err != nil { - errs.AddRecoverable(clues.Stack(err).With("backup_id", id)) + errs.AddRecoverable(clues.Stack(err)) } bups = append(bups, b) @@ -486,7 +488,7 @@ func getBackupErrors( } // DeleteBackup removes the backup from both the model store and the backup storage. -func (r repository) DeleteBackup(ctx context.Context, id model.StableID) error { +func (r repository) DeleteBackup(ctx context.Context, id string) error { bu, err := r.Backup(ctx, id) if err != nil { return err @@ -510,7 +512,7 @@ func (r repository) DeleteBackup(ctx context.Context, id model.StableID) error { sw := store.NewKopiaStore(r.modelStore) - return sw.DeleteBackup(ctx, id) + return sw.DeleteBackup(ctx, model.StableID(id)) } // --------------------------------------------------------------------------- From b81a527c10e3be411c79181a003d6954dd0e27ca Mon Sep 17 00:00:00 2001 From: Keepers Date: Fri, 31 Mar 2023 16:14:09 -0600 Subject: [PATCH 05/37] add clues.Hide to replace observe.PII (#2993) The observe PII handlers are getting replaced by the more standardized clues secrets. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :broom: Tech Debt/Cleanup #### Issue(s) * #2024 #### Test Plan - [x] :muscle: Manual - [x] :green_heart: E2E --- src/go.mod | 2 +- src/go.sum | 4 +- .../connector/exchange/data_collections.go | 2 +- .../exchange/exchange_data_collection.go | 3 +- .../connector/exchange/service_restore.go | 2 +- src/internal/connector/onedrive/collection.go | 12 +- .../connector/onedrive/collections.go | 2 +- src/internal/connector/onedrive/restore.go | 7 +- .../connector/sharepoint/collection.go | 3 +- .../connector/sharepoint/data_collections.go | 2 +- src/internal/observe/observe.go | 150 ++++++++---------- src/internal/observe/observe_test.go | 22 +-- src/internal/operations/backup.go | 6 +- src/internal/operations/restore.go | 8 +- src/pkg/repository/repository.go | 4 +- 15 files changed, 111 insertions(+), 118 deletions(-) diff --git a/src/go.mod b/src/go.mod index 9e5c73ac4..e51d46bc5 100644 --- a/src/go.mod +++ b/src/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 - github.com/alcionai/clues v0.0.0-20230327232656-5b9b43a79836 + github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0 github.com/armon/go-metrics v0.4.0 github.com/aws/aws-sdk-go v1.44.220 github.com/aws/aws-xray-sdk-go v1.8.1 diff --git a/src/go.sum b/src/go.sum index 138a3768b..4dc26b435 100644 --- a/src/go.sum +++ b/src/go.sum @@ -53,8 +53,8 @@ github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1o github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= -github.com/alcionai/clues v0.0.0-20230327232656-5b9b43a79836 h1:239Dcnoe7y4kLeWS6XbdtvFwYOKT9Q28wqSZpwwqtbY= -github.com/alcionai/clues v0.0.0-20230327232656-5b9b43a79836/go.mod h1:DeaMbAwDvYM6ZfPMR/GUl3hceqI5C8jIQ1lstjB2IW8= +github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0 h1:2Fv5zc02wURwUv3Gjo3oqGybSj5tNaXyNIijlrR8SI0= +github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0/go.mod h1:DeaMbAwDvYM6ZfPMR/GUl3hceqI5C8jIQ1lstjB2IW8= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= diff --git a/src/internal/connector/exchange/data_collections.go b/src/internal/connector/exchange/data_collections.go index 3391b96f4..87a0842b8 100644 --- a/src/internal/connector/exchange/data_collections.go +++ b/src/internal/connector/exchange/data_collections.go @@ -279,7 +279,7 @@ func createCollections( foldersComplete, closer := observe.MessageWithCompletion( ctx, - observe.Bulletf("%s", observe.Safe(qp.Category.String()))) + observe.Bulletf("%s", qp.Category)) defer closer() defer close(foldersComplete) diff --git a/src/internal/connector/exchange/exchange_data_collection.go b/src/internal/connector/exchange/exchange_data_collection.go index 1b935cfca..3a0d9c1a8 100644 --- a/src/internal/connector/exchange/exchange_data_collection.go +++ b/src/internal/connector/exchange/exchange_data_collection.go @@ -186,7 +186,8 @@ func (col *Collection) streamItems(ctx context.Context, errs *fault.Bus) { colProgress, closer = observe.CollectionProgress( ctx, col.fullPath.Category().String(), - observe.PII(col.fullPath.Folder(false))) + // TODO(keepers): conceal compliance in path, drop Hide() + clues.Hide(col.fullPath.Folder(false))) go closer() diff --git a/src/internal/connector/exchange/service_restore.go b/src/internal/connector/exchange/service_restore.go index 3a0cdd68e..c72b1cbf0 100644 --- a/src/internal/connector/exchange/service_restore.go +++ b/src/internal/connector/exchange/service_restore.go @@ -390,7 +390,7 @@ func restoreCollection( colProgress, closer := observe.CollectionProgress( ctx, category.String(), - observe.PII(directory.Folder(false))) + clues.Hide(directory.Folder(false))) defer closer() defer close(colProgress) diff --git a/src/internal/connector/onedrive/collection.go b/src/internal/connector/onedrive/collection.go index 25df599fc..ba8b715fa 100644 --- a/src/internal/connector/onedrive/collection.go +++ b/src/internal/connector/onedrive/collection.go @@ -419,7 +419,8 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) { folderProgress, colCloser := observe.ProgressWithCount( ctx, observe.ItemQueueMsg, - observe.PII(queuedPath), + // TODO(keepers): conceal compliance in path, drop Hide() + clues.Hide(queuedPath), int64(len(oc.driveItems))) defer colCloser() defer close(folderProgress) @@ -517,7 +518,7 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) { ctx, itemData, observe.ItemBackupMsg, - observe.PII(itemID+dataSuffix), + clues.Hide(itemID+dataSuffix), itemSize) go closer() @@ -533,8 +534,11 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) { metaReader := lazy.NewLazyReadCloser(func() (io.ReadCloser, error) { progReader, closer := observe.ItemProgress( - ctx, itemMeta, observe.ItemBackupMsg, - observe.PII(metaFileName+metaSuffix), int64(itemMetaSize)) + ctx, + itemMeta, + observe.ItemBackupMsg, + clues.Hide(metaFileName+metaSuffix), + int64(itemMetaSize)) go closer() return progReader, nil }) diff --git a/src/internal/connector/onedrive/collections.go b/src/internal/connector/onedrive/collections.go index 70ad1be57..4ab890552 100644 --- a/src/internal/connector/onedrive/collections.go +++ b/src/internal/connector/onedrive/collections.go @@ -432,7 +432,7 @@ func (c *Collections) Get( } } - observe.Message(ctx, observe.Safe(fmt.Sprintf("Discovered %d items to backup", c.NumItems))) + observe.Message(ctx, fmt.Sprintf("Discovered %d items to backup", c.NumItems)) // Add an extra for the metadata collection. collections := []data.BackupCollection{} diff --git a/src/internal/connector/onedrive/restore.go b/src/internal/connector/onedrive/restore.go index dc1c870a3..3505f6c2b 100644 --- a/src/internal/connector/onedrive/restore.go +++ b/src/internal/connector/onedrive/restore.go @@ -598,7 +598,12 @@ func restoreData( } iReader := itemData.ToReader() - progReader, closer := observe.ItemProgress(ctx, iReader, observe.ItemRestoreMsg, observe.PII(itemName), ss.Size()) + progReader, closer := observe.ItemProgress( + ctx, + iReader, + observe.ItemRestoreMsg, + clues.Hide(itemName), + ss.Size()) go closer() diff --git a/src/internal/connector/sharepoint/collection.go b/src/internal/connector/sharepoint/collection.go index 1db542e9b..0350601e7 100644 --- a/src/internal/connector/sharepoint/collection.go +++ b/src/internal/connector/sharepoint/collection.go @@ -186,7 +186,8 @@ func (sc *Collection) runPopulate(ctx context.Context, errs *fault.Bus) (support colProgress, closer := observe.CollectionProgress( ctx, sc.fullPath.Category().String(), - observe.PII(sc.fullPath.Folder(false))) + // TODO(keepers): conceal compliance in path, drop Hide() + clues.Hide(sc.fullPath.Folder(false))) go closer() defer func() { diff --git a/src/internal/connector/sharepoint/data_collections.go b/src/internal/connector/sharepoint/data_collections.go index 02da46e3b..4c3895bc3 100644 --- a/src/internal/connector/sharepoint/data_collections.go +++ b/src/internal/connector/sharepoint/data_collections.go @@ -56,7 +56,7 @@ func DataCollections( foldersComplete, closer := observe.MessageWithCompletion( ctx, - observe.Bulletf("%s", observe.Safe(scope.Category().PathType().String()))) + observe.Bulletf("%s", scope.Category().PathType())) defer closer() defer close(foldersComplete) diff --git a/src/internal/observe/observe.go b/src/internal/observe/observe.go index 50e7411b1..67db8b7a2 100644 --- a/src/internal/observe/observe.go +++ b/src/internal/observe/observe.go @@ -8,6 +8,7 @@ import ( "strings" "sync" + "github.com/alcionai/clues" "github.com/dustin/go-humanize" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -23,11 +24,6 @@ const ( progressBarWidth = 32 ) -// styling -const bullet = "∙" - -const Bullet = Safe(bullet) - var ( wg sync.WaitGroup // TODO: Revisit this being a global nd make it a parameter to the progress methods @@ -143,19 +139,19 @@ const ( // Progress Updates // Message is used to display a progress message -func Message(ctx context.Context, msgs ...cleanable) { - var ( - cleaned = make([]string, len(msgs)) - msg = make([]string, len(msgs)) - ) +func Message(ctx context.Context, msgs ...any) { + plainSl := make([]string, 0, len(msgs)) + loggableSl := make([]string, 0, len(msgs)) - for i := range msgs { - cleaned[i] = msgs[i].clean() - msg[i] = msgs[i].String() + for _, m := range msgs { + plainSl = append(plainSl, plainString(m)) + loggableSl = append(loggableSl, fmt.Sprintf("%v", m)) } - logger.Ctx(ctx).Info(strings.Join(cleaned, " ")) - message := strings.Join(msg, " ") + plain := strings.Join(plainSl, " ") + loggable := strings.Join(loggableSl, " ") + + logger.Ctx(ctx).Info(loggable) if cfg.hidden() { return @@ -167,9 +163,9 @@ func Message(ctx context.Context, msgs ...cleanable) { -1, mpb.NopStyle(), mpb.PrependDecorators(decor.Name( - message, + plain, decor.WC{ - W: len(message) + 1, + W: len(plain) + 1, C: decor.DidentRight, }))) @@ -183,19 +179,19 @@ func Message(ctx context.Context, msgs ...cleanable) { // that switches to "done" when the completion channel is signalled func MessageWithCompletion( ctx context.Context, - msg cleanable, + msg any, ) (chan<- struct{}, func()) { var ( - clean = msg.clean() - message = msg.String() - log = logger.Ctx(ctx) - ch = make(chan struct{}, 1) + plain = plainString(msg) + loggable = fmt.Sprintf("%v", msg) + log = logger.Ctx(ctx) + ch = make(chan struct{}, 1) ) - log.Info(clean) + log.Info(loggable) if cfg.hidden() { - return ch, func() { log.Info("done - " + clean) } + return ch, func() { log.Info("done - " + loggable) } } wg.Add(1) @@ -206,7 +202,7 @@ func MessageWithCompletion( -1, mpb.SpinnerStyle(frames...).PositionLeft(), mpb.PrependDecorators( - decor.Name(message+":"), + decor.Name(plain+":"), decor.Elapsed(decor.ET_STYLE_GO, decor.WC{W: 8})), mpb.BarFillerOnComplete("done")) @@ -224,7 +220,7 @@ func MessageWithCompletion( }) wacb := waitAndCloseBar(bar, func() { - log.Info("done - " + clean) + log.Info("done - " + loggable) }) return ch, wacb @@ -241,11 +237,12 @@ func ItemProgress( ctx context.Context, rc io.ReadCloser, header string, - iname cleanable, + iname any, totalBytes int64, ) (io.ReadCloser, func()) { + plain := plainString(iname) log := logger.Ctx(ctx).With( - "item", iname.clean(), + "item", iname, "size", humanize.Bytes(uint64(totalBytes))) log.Debug(header) @@ -258,7 +255,7 @@ func ItemProgress( barOpts := []mpb.BarOption{ mpb.PrependDecorators( decor.Name(header, decor.WCSyncSpaceR), - decor.Name(iname.String(), decor.WCSyncSpaceR), + decor.Name(plain, decor.WCSyncSpaceR), decor.CountersKibiByte(" %.1f/%.1f ", decor.WC{W: 8}), decor.NewPercentage("%d ", decor.WC{W: 4})), } @@ -284,20 +281,21 @@ func ItemProgress( func ProgressWithCount( ctx context.Context, header string, - message cleanable, + msg any, count int64, ) (chan<- struct{}, func()) { var ( - log = logger.Ctx(ctx) - lmsg = fmt.Sprintf("%s %s - %d", header, message.clean(), count) - ch = make(chan struct{}) + plain = plainString(msg) + loggable = fmt.Sprintf("%s %v - %d", header, msg, count) + log = logger.Ctx(ctx) + ch = make(chan struct{}) ) - log.Info(lmsg) + log.Info(loggable) if cfg.hidden() { go listen(ctx, ch, nop, nop) - return ch, func() { log.Info("done - " + lmsg) } + return ch, func() { log.Info("done - " + loggable) } } wg.Add(1) @@ -305,7 +303,7 @@ func ProgressWithCount( barOpts := []mpb.BarOption{ mpb.PrependDecorators( decor.Name(header, decor.WCSyncSpaceR), - decor.Name(message.String()), + decor.Name(plain), decor.Counters(0, " %d/%d ")), } @@ -322,7 +320,7 @@ func ProgressWithCount( bar.Increment) wacb := waitAndCloseBar(bar, func() { - log.Info("done - " + lmsg) + log.Info("done - " + loggable) }) return ch, wacb @@ -366,14 +364,15 @@ func makeSpinFrames(barWidth int) { func CollectionProgress( ctx context.Context, category string, - dirName cleanable, + dirName any, ) (chan<- struct{}, func()) { var ( counted int + plain = plainString(dirName) ch = make(chan struct{}) log = logger.Ctx(ctx).With( "category", category, - "dir", dirName.clean()) + "dir", dirName) message = "Collecting Directory" ) @@ -387,7 +386,7 @@ func CollectionProgress( } } - if cfg.hidden() || len(dirName.String()) == 0 { + if cfg.hidden() || len(plain) == 0 { go listen(ctx, ch, nop, incCount) return ch, func() { log.Infow("done - "+message, "count", counted) } } @@ -398,7 +397,7 @@ func CollectionProgress( mpb.PrependDecorators(decor.Name(string(category))), mpb.AppendDecorators( decor.CurrentNoUnit("%d - ", decor.WCSyncSpace), - decor.Name(dirName.String()), + decor.Name(plain), ), mpb.BarFillerOnComplete(spinFrames[0]), } @@ -466,62 +465,45 @@ func listen(ctx context.Context, ch <-chan struct{}, onEnd, onInc func()) { } // --------------------------------------------------------------------------- -// PII redaction +// Styling // --------------------------------------------------------------------------- -type cleanable interface { - clean() string - String() string -} +const Bullet = "∙" -type PII string - -func (p PII) clean() string { - return "***" -} - -func (p PII) String() string { - return string(p) -} - -type Safe string - -func (s Safe) clean() string { - return string(s) -} - -func (s Safe) String() string { - return string(s) -} - -type bulletPII struct { +type bulletf struct { tmpl string - vars []cleanable + vs []any } -func Bulletf(template string, vs ...cleanable) bulletPII { - return bulletPII{ - tmpl: "∙ " + template, - vars: vs, - } +func Bulletf(template string, vs ...any) bulletf { + return bulletf{template, vs} } -func (b bulletPII) clean() string { - vs := make([]any, 0, len(b.vars)) - - for _, v := range b.vars { - vs = append(vs, v.clean()) +func (b bulletf) PlainString() string { + ps := make([]any, 0, len(b.vs)) + for _, v := range b.vs { + ps = append(ps, plainString(v)) } - return fmt.Sprintf(b.tmpl, vs...) + return fmt.Sprintf("∙ "+b.tmpl, ps...) } -func (b bulletPII) String() string { - vs := make([]any, 0, len(b.vars)) +func (b bulletf) String() string { + return fmt.Sprintf("∙ "+b.tmpl, b.vs...) +} - for _, v := range b.vars { - vs = append(vs, v.String()) +// plainString attempts to cast v to a PlainStringer +// interface, and retrieve the un-altered value. If +// v is not compliant with PlainStringer, returns the +// %v fmt of v. +// +// This should only be used to display the value in the +// observe progress bar. Logged values should only use +// the fmt %v to ensure Concealers hide PII. +func plainString(v any) string { + if ps, ok := v.(clues.PlainStringer); ok { + return ps.PlainString() } - return fmt.Sprintf(b.tmpl, vs...) + return fmt.Sprintf("%v", v) } diff --git a/src/internal/observe/observe_test.go b/src/internal/observe/observe_test.go index 31c818e05..89361304e 100644 --- a/src/internal/observe/observe_test.go +++ b/src/internal/observe/observe_test.go @@ -29,9 +29,9 @@ func TestObserveProgressUnitSuite(t *testing.T) { } var ( - tst = Safe("test") - testcat = Safe("testcat") - testertons = Safe("testertons") + tst = "test" + testcat = "testcat" + testertons = "testertons" ) func (suite *ObserveProgressUnitSuite) TestItemProgress() { @@ -105,7 +105,7 @@ func (suite *ObserveProgressUnitSuite) TestCollectionProgress_unblockOnCtxCancel SeedWriter(context.Background(), nil, nil) }() - progCh, closer := CollectionProgress(ctx, testcat.clean(), testertons) + progCh, closer := CollectionProgress(ctx, testcat, testertons) require.NotNil(t, progCh) require.NotNil(t, closer) @@ -140,7 +140,7 @@ func (suite *ObserveProgressUnitSuite) TestCollectionProgress_unblockOnChannelCl SeedWriter(context.Background(), nil, nil) }() - progCh, closer := CollectionProgress(ctx, testcat.clean(), testertons) + progCh, closer := CollectionProgress(ctx, testcat, testertons) require.NotNil(t, progCh) require.NotNil(t, closer) @@ -172,7 +172,7 @@ func (suite *ObserveProgressUnitSuite) TestObserveProgress() { message := "Test Message" - Message(ctx, Safe(message)) + Message(ctx, message) Complete() require.NotEmpty(suite.T(), recorder.String()) require.Contains(suite.T(), recorder.String(), message) @@ -193,7 +193,7 @@ func (suite *ObserveProgressUnitSuite) TestObserveProgressWithCompletion() { message := "Test Message" - ch, closer := MessageWithCompletion(ctx, Safe(message)) + ch, closer := MessageWithCompletion(ctx, message) // Trigger completion ch <- struct{}{} @@ -223,7 +223,7 @@ func (suite *ObserveProgressUnitSuite) TestObserveProgressWithChannelClosed() { message := "Test Message" - ch, closer := MessageWithCompletion(ctx, Safe(message)) + ch, closer := MessageWithCompletion(ctx, message) // Close channel without completing close(ch) @@ -255,7 +255,7 @@ func (suite *ObserveProgressUnitSuite) TestObserveProgressWithContextCancelled() message := "Test Message" - _, closer := MessageWithCompletion(ctx, Safe(message)) + _, closer := MessageWithCompletion(ctx, message) // cancel context cancel() @@ -286,7 +286,7 @@ func (suite *ObserveProgressUnitSuite) TestObserveProgressWithCount() { message := "Test Message" count := 3 - ch, closer := ProgressWithCount(ctx, header, Safe(message), int64(count)) + ch, closer := ProgressWithCount(ctx, header, message, int64(count)) for i := 0; i < count; i++ { ch <- struct{}{} @@ -319,7 +319,7 @@ func (suite *ObserveProgressUnitSuite) TestrogressWithCountChannelClosed() { message := "Test Message" count := 3 - ch, closer := ProgressWithCount(ctx, header, Safe(message), int64(count)) + ch, closer := ProgressWithCount(ctx, header, message, int64(count)) close(ch) diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index c97d7a1ec..8139d04ad 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -165,7 +165,7 @@ func (op *BackupOperation) Run(ctx context.Context) (err error) { // Execution // ----- - observe.Message(ctx, observe.Safe("Backing Up"), observe.Bullet, observe.PII(op.ResourceOwner)) + observe.Message(ctx, "Backing Up", observe.Bullet, clues.Hide(op.ResourceOwner)) deets, err := op.do( ctx, @@ -332,7 +332,7 @@ func produceBackupDataCollections( ctrlOpts control.Options, errs *fault.Bus, ) ([]data.BackupCollection, map[string]map[string]struct{}, error) { - complete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Discovering items to backup")) + complete, closer := observe.MessageWithCompletion(ctx, "Discovering items to backup") defer func() { complete <- struct{}{} close(complete) @@ -403,7 +403,7 @@ func consumeBackupCollections( isIncremental bool, errs *fault.Bus, ) (*kopia.BackupStats, *details.Builder, map[string]kopia.PrevRefs, error) { - complete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Backing up data")) + complete, closer := observe.MessageWithCompletion(ctx, "Backing up data") defer func() { complete <- struct{}{} close(complete) diff --git a/src/internal/operations/restore.go b/src/internal/operations/restore.go index 1dac69098..4e45aad4c 100644 --- a/src/internal/operations/restore.go +++ b/src/internal/operations/restore.go @@ -185,7 +185,7 @@ func (op *RestoreOperation) do( return nil, clues.Wrap(err, "getting backup and details") } - observe.Message(ctx, observe.Safe("Restoring"), observe.Bullet, observe.PII(bup.Selector.DiscreteOwner)) + observe.Message(ctx, "Restoring", observe.Bullet, clues.Hide(bup.Selector.DiscreteOwner)) paths, err := formatDetailsForRestoration(ctx, bup.Version, op.Selectors, deets, op.Errors) if err != nil { @@ -210,10 +210,10 @@ func (op *RestoreOperation) do( events.RestoreID: opStats.restoreID, }) - observe.Message(ctx, observe.Safe(fmt.Sprintf("Discovered %d items in backup %s to restore", len(paths), op.BackupID))) + observe.Message(ctx, fmt.Sprintf("Discovered %d items in backup %s to restore", len(paths), op.BackupID)) logger.Ctx(ctx).With("selectors", op.Selectors).Info("restoring selection") - kopiaComplete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Enumerating items in repository")) + kopiaComplete, closer := observe.MessageWithCompletion(ctx, "Enumerating items in repository") defer closer() defer close(kopiaComplete) @@ -317,7 +317,7 @@ func consumeRestoreCollections( dcs []data.RestoreCollection, errs *fault.Bus, ) (*details.Details, error) { - complete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Restoring data")) + complete, closer := observe.MessageWithCompletion(ctx, "Restoring data") defer func() { complete <- struct{}{} close(complete) diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 10a910bf3..45eef688a 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -188,7 +188,7 @@ func Connect( // their output getting clobbered (#1720) defer observe.Complete() - complete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Connecting to repository")) + complete, closer := observe.MessageWithCompletion(ctx, "Connecting to repository") defer closer() defer close(complete) @@ -570,7 +570,7 @@ func connectToM365( acct account.Account, errs *fault.Bus, ) (*connector.GraphConnector, error) { - complete, closer := observe.MessageWithCompletion(ctx, observe.Safe("Connecting to M365")) + complete, closer := observe.MessageWithCompletion(ctx, "Connecting to M365") defer func() { complete <- struct{}{} close(complete) From 983aaabdb26a17011b5fdd0db34882e9682292bb Mon Sep 17 00:00:00 2001 From: Keepers Date: Fri, 31 Mar 2023 17:47:34 -0600 Subject: [PATCH 06/37] restrict sharepoint test backups to test folders (#2969) To avoid over-production of data, and thus longer CI times, any sharepoint integration test that can scope library usage down to only the "test" folders should do so. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :robot: Supportability/Tests #### Test Plan - [x] :zap: Unit test - [x] :green_heart: E2E --- src/cli/backup/sharepoint_e2e_test.go | 3 +- .../connector/data_collections_test.go | 9 ++-- .../connector/graph_connector_test.go | 41 ++++++++++--------- .../operations/backup_integration_test.go | 3 +- src/pkg/selectors/testdata/sharepoint.go | 9 ++++ 5 files changed, 39 insertions(+), 26 deletions(-) create mode 100644 src/pkg/selectors/testdata/sharepoint.go diff --git a/src/cli/backup/sharepoint_e2e_test.go b/src/cli/backup/sharepoint_e2e_test.go index 94289a7d5..dd5556e9e 100644 --- a/src/cli/backup/sharepoint_e2e_test.go +++ b/src/cli/backup/sharepoint_e2e_test.go @@ -22,6 +22,7 @@ import ( "github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/repository" "github.com/alcionai/corso/src/pkg/selectors" + "github.com/alcionai/corso/src/pkg/selectors/testdata" "github.com/alcionai/corso/src/pkg/storage" ) @@ -161,7 +162,7 @@ func (suite *BackupDeleteSharePointE2ESuite) SetupSuite() { // some tests require an existing backup sel := selectors.NewSharePointBackup(sites) - sel.Include(sel.LibraryFolders(selectors.Any())) + sel.Include(testdata.SharePointBackupFolderScope(sel)) suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector) require.NoError(t, err, clues.ToCore(err)) diff --git a/src/internal/connector/data_collections_test.go b/src/internal/connector/data_collections_test.go index 00d16c882..1d4b55373 100644 --- a/src/internal/connector/data_collections_test.go +++ b/src/internal/connector/data_collections_test.go @@ -18,6 +18,7 @@ import ( "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/path" "github.com/alcionai/corso/src/pkg/selectors" + "github.com/alcionai/corso/src/pkg/selectors/testdata" ) // --------------------------------------------------------------------------- @@ -168,7 +169,7 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestDataCollections_invali name: "Invalid sharepoint backup site", getSelector: func(t *testing.T) selectors.Selector { sel := selectors.NewSharePointBackup(owners) - sel.Include(sel.LibraryFolders(selectors.Any())) + sel.Include(testdata.SharePointBackupFolderScope(sel)) return sel.Selector }, }, @@ -194,7 +195,7 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestDataCollections_invali name: "missing sharepoint backup site", getSelector: func(t *testing.T) selectors.Selector { sel := selectors.NewSharePointBackup(owners) - sel.Include(sel.LibraryFolders(selectors.Any())) + sel.Include(testdata.SharePointBackupFolderScope(sel)) sel.DiscreteOwner = "" return sel.Selector }, @@ -238,7 +239,7 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestSharePointDataCollecti name: "Libraries", getSelector: func() selectors.Selector { sel := selectors.NewSharePointBackup(selSites) - sel.Include(sel.LibraryFolders(selectors.Any())) + sel.Include(testdata.SharePointBackupFolderScope(sel)) return sel.Selector }, }, @@ -374,7 +375,7 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar ) sel := selectors.NewSharePointBackup(siteIDs) - sel.Include(sel.Lists(selectors.Any(), selectors.PrefixMatch())) + sel.Include(sel.Lists(selectors.Any())) cols, excludes, err := gc.ProduceBackupCollections( ctx, diff --git a/src/internal/connector/graph_connector_test.go b/src/internal/connector/graph_connector_test.go index 2a5fbc1ac..dc8115134 100644 --- a/src/internal/connector/graph_connector_test.go +++ b/src/internal/connector/graph_connector_test.go @@ -1115,27 +1115,28 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections path.FilesCategory.String(), }, }, - // SharePoint lists and pages don't seem to check selectors as expected. - //{ - // name: "SharePoint", - // resource: Sites, - // selectorFunc: func(t *testing.T) selectors.Selector { - // sel := selectors.NewSharePointBackup([]string{tester.M365SiteID(t)}) - // sel.Include( - // sel.Pages([]string{selectors.NoneTgt}), - // sel.Lists([]string{selectors.NoneTgt}), - // sel.Libraries([]string{selectors.NoneTgt}), - // ) + { + name: "SharePoint", + resource: Sites, + selectorFunc: func(t *testing.T) selectors.Selector { + sel := selectors.NewSharePointBackup([]string{tester.M365SiteID(t)}) + sel.Include( + sel.LibraryFolders([]string{selectors.NoneTgt}), + // not yet in use + // sel.Pages([]string{selectors.NoneTgt}), + // sel.Lists([]string{selectors.NoneTgt}), + ) - // return sel.Selector - // }, - // service: path.SharePointService, - // categories: []string{ - // path.PagesCategory.String(), - // path.ListsCategory.String(), - // path.LibrariesCategory.String(), - // }, - //}, + return sel.Selector + }, + service: path.SharePointService, + categories: []string{ + path.LibrariesCategory.String(), + // not yet in use + // path.PagesCategory.String(), + // path.ListsCategory.String(), + }, + }, } for _, test := range table { diff --git a/src/internal/operations/backup_integration_test.go b/src/internal/operations/backup_integration_test.go index 2de42ee31..1da1ac6ff 100644 --- a/src/internal/operations/backup_integration_test.go +++ b/src/internal/operations/backup_integration_test.go @@ -40,6 +40,7 @@ import ( "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/path" "github.com/alcionai/corso/src/pkg/selectors" + "github.com/alcionai/corso/src/pkg/selectors/testdata" "github.com/alcionai/corso/src/pkg/store" ) @@ -1608,7 +1609,7 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_sharePoint() { sel = selectors.NewSharePointBackup([]string{suite.site}) ) - sel.Include(sel.LibraryFolders(selectors.Any())) + sel.Include(testdata.SharePointBackupFolderScope(sel)) bo, _, kw, _, _, closer := prepNewTestBackupOp(t, ctx, mb, sel.Selector, control.Toggles{}) defer closer() diff --git a/src/pkg/selectors/testdata/sharepoint.go b/src/pkg/selectors/testdata/sharepoint.go new file mode 100644 index 000000000..6051c2fda --- /dev/null +++ b/src/pkg/selectors/testdata/sharepoint.go @@ -0,0 +1,9 @@ +package testdata + +import "github.com/alcionai/corso/src/pkg/selectors" + +// SharePointBackupFolderScope is the standard folder scope that should be used +// in integration backups with sharepoint. +func SharePointBackupFolderScope(sel *selectors.SharePointBackup) []selectors.SharePointScope { + return sel.LibraryFolders([]string{"test"}, selectors.PrefixMatch()) +} From f2bf0ee685a311bf3baa753807824416dfc98e5f Mon Sep 17 00:00:00 2001 From: Keepers Date: Fri, 31 Mar 2023 18:43:52 -0600 Subject: [PATCH 07/37] introduce fail-after-recovery option (#3005) While fail-fast and best-effort make for good categories at the extreme ends of error handling, we keep finding outselves wanting to operate in a middle ground. This change introduces a new error handling category: FailAfterRecovery. This option tells corso to complete as much of its process as it can, even if it recovers from errors. But at the end of processing, if it recovered from any errors, an error is returned for the operation. This behavior is the new failure handling default, instead of failFast. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Test Plan - [x] :muscle: Manual - [x] :zap: Unit test --- src/cli/options/options.go | 5 +- .../exchange/service_iterators_test.go | 12 +-- src/internal/operations/backup.go | 1 + .../operations/{logging.go => helpers.go} | 34 ++++++ src/internal/operations/helpers_test.go | 102 ++++++++++++++++++ src/internal/operations/operation.go | 2 +- src/internal/operations/restore.go | 1 + src/internal/operations/restore_test.go | 2 +- src/pkg/control/options.go | 19 +++- .../loadtest/repository_load_test.go | 4 +- 10 files changed, 167 insertions(+), 15 deletions(-) rename src/internal/operations/{logging.go => helpers.go} (57%) create mode 100644 src/internal/operations/helpers_test.go diff --git a/src/cli/options/options.go b/src/cli/options/options.go index d9bdd08c1..30cbdbf8a 100644 --- a/src/cli/options/options.go +++ b/src/cli/options/options.go @@ -11,7 +11,10 @@ import ( func Control() control.Options { opt := control.Defaults() - opt.FailFast = fastFail + if fastFail { + opt.FailureHandling = control.FailFast + } + opt.DisableMetrics = noStats opt.RestorePermissions = restorePermissions opt.SkipReduce = skipReduce diff --git a/src/internal/connector/exchange/service_iterators_test.go b/src/internal/connector/exchange/service_iterators_test.go index f14601b8c..9d72dc181 100644 --- a/src/internal/connector/exchange/service_iterators_test.go +++ b/src/internal/connector/exchange/service_iterators_test.go @@ -162,7 +162,7 @@ func (suite *ServiceIteratorsSuite) TestFilterContainersAndFillCollections() { getter mockGetter resolver graph.ContainerResolver scope selectors.ExchangeScope - failFast bool + failFast control.FailureBehavior expectErr assert.ErrorAssertionFunc expectNewColls int expectMetadataColls int @@ -271,7 +271,7 @@ func (suite *ServiceIteratorsSuite) TestFilterContainersAndFillCollections() { }, resolver: newMockResolver(container1, container2), scope: allScope, - failFast: true, + failFast: control.FailFast, expectErr: assert.NoError, expectNewColls: 2, expectMetadataColls: 1, @@ -285,7 +285,7 @@ func (suite *ServiceIteratorsSuite) TestFilterContainersAndFillCollections() { }, resolver: newMockResolver(container1, container2), scope: allScope, - failFast: true, + failFast: control.FailFast, expectErr: assert.Error, expectNewColls: 0, expectMetadataColls: 0, @@ -309,8 +309,8 @@ func (suite *ServiceIteratorsSuite) TestFilterContainersAndFillCollections() { test.resolver, test.scope, dps, - control.Options{FailFast: test.failFast}, - fault.New(test.failFast)) + control.Options{FailureHandling: test.failFast}, + fault.New(test.failFast == control.FailFast)) test.expectErr(t, err, clues.ToCore(err)) // collection assertions @@ -465,7 +465,7 @@ func (suite *ServiceIteratorsSuite) TestFilterContainersAndFillCollections_repea resolver, allScope, dps, - control.Options{FailFast: true}, + control.Options{FailureHandling: control.FailFast}, fault.New(true)) require.NoError(t, err, clues.ToCore(err)) diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 8139d04ad..5f6259355 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -180,6 +180,7 @@ func (op *BackupOperation) Run(ctx context.Context) (err error) { op.Errors.Fail(clues.Wrap(err, "running backup")) } + finalizeErrorHandling(ctx, op.Options, op.Errors, "running backup") LogFaultErrors(ctx, op.Errors.Errors(), "running backup") // ----- diff --git a/src/internal/operations/logging.go b/src/internal/operations/helpers.go similarity index 57% rename from src/internal/operations/logging.go rename to src/internal/operations/helpers.go index e0e0cd51d..8cfbe66a0 100644 --- a/src/internal/operations/logging.go +++ b/src/internal/operations/helpers.go @@ -2,11 +2,45 @@ package operations import ( "context" + "fmt" + "github.com/alcionai/clues" + + "github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/logger" ) +// finalizeErrorHandling ensures the operation follow the options +// failure behavior requirements. +func finalizeErrorHandling( + ctx context.Context, + opts control.Options, + errs *fault.Bus, + prefix string, +) { + rcvd := errs.Recovered() + + // under certain conditions, there's nothing else left to do + if opts.FailureHandling == control.BestEffort || + errs.Failure() != nil || + len(rcvd) == 0 { + return + } + + if opts.FailureHandling == control.FailAfterRecovery { + msg := fmt.Sprintf("%s: partial success: %d errors occurred", prefix, len(rcvd)) + logger.Ctx(ctx).Error(msg) + + if len(rcvd) == 1 { + errs.Fail(rcvd[0]) + return + } + + errs.Fail(clues.New(msg)) + } +} + // LogFaultErrors is a helper function that logs all entries in the Errors struct. func LogFaultErrors(ctx context.Context, fe *fault.Errors, prefix string) { if fe == nil { diff --git a/src/internal/operations/helpers_test.go b/src/internal/operations/helpers_test.go new file mode 100644 index 000000000..c02f2131c --- /dev/null +++ b/src/internal/operations/helpers_test.go @@ -0,0 +1,102 @@ +package operations + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" + + "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/pkg/control" + "github.com/alcionai/corso/src/pkg/fault" +) + +type HelpersUnitSuite struct { + tester.Suite +} + +func TestHelpersUnitSuite(t *testing.T) { + suite.Run(t, &HelpersUnitSuite{Suite: tester.NewUnitSuite(t)}) +} + +func (suite *HelpersUnitSuite) TestFinalizeErrorHandling() { + table := []struct { + name string + errs func() *fault.Bus + opts control.Options + expectErr assert.ErrorAssertionFunc + }{ + { + name: "no errors", + errs: func() *fault.Bus { + return fault.New(false) + }, + opts: control.Options{ + FailureHandling: control.FailAfterRecovery, + }, + expectErr: assert.NoError, + }, + { + name: "already failed", + errs: func() *fault.Bus { + fn := fault.New(false) + fn.Fail(assert.AnError) + return fn + }, + opts: control.Options{ + FailureHandling: control.FailAfterRecovery, + }, + expectErr: assert.Error, + }, + { + name: "best effort", + errs: func() *fault.Bus { + fn := fault.New(false) + fn.AddRecoverable(assert.AnError) + return fn + }, + opts: control.Options{ + FailureHandling: control.BestEffort, + }, + expectErr: assert.NoError, + }, + { + name: "recoverable errors produce hard fail", + errs: func() *fault.Bus { + fn := fault.New(false) + fn.AddRecoverable(assert.AnError) + return fn + }, + opts: control.Options{ + FailureHandling: control.FailAfterRecovery, + }, + expectErr: assert.Error, + }, + { + name: "multiple recoverable errors produce hard fail", + errs: func() *fault.Bus { + fn := fault.New(false) + fn.AddRecoverable(assert.AnError) + fn.AddRecoverable(assert.AnError) + fn.AddRecoverable(assert.AnError) + return fn + }, + opts: control.Options{ + FailureHandling: control.FailAfterRecovery, + }, + expectErr: assert.Error, + }, + } + for _, test := range table { + suite.Run(test.name, func() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + errs := test.errs() + + finalizeErrorHandling(ctx, test.opts, errs, "test") + test.expectErr(t, errs.Failure()) + }) + } +} diff --git a/src/internal/operations/operation.go b/src/internal/operations/operation.go index e4cd201db..5144c4abb 100644 --- a/src/internal/operations/operation.go +++ b/src/internal/operations/operation.go @@ -66,7 +66,7 @@ func newOperation( ) operation { return operation{ CreatedAt: time.Now(), - Errors: fault.New(opts.FailFast), + Errors: fault.New(opts.FailureHandling == control.FailFast), Options: opts, bus: bus, diff --git a/src/internal/operations/restore.go b/src/internal/operations/restore.go index 4e45aad4c..1220cfe66 100644 --- a/src/internal/operations/restore.go +++ b/src/internal/operations/restore.go @@ -152,6 +152,7 @@ func (op *RestoreOperation) Run(ctx context.Context) (restoreDetails *details.De op.Errors.Fail(clues.Wrap(err, "running restore")) } + finalizeErrorHandling(ctx, op.Options, op.Errors, "running restore") LogFaultErrors(ctx, op.Errors.Errors(), "running restore") // ----- diff --git a/src/internal/operations/restore_test.go b/src/internal/operations/restore_test.go index 4344e08ee..33ac4a881 100644 --- a/src/internal/operations/restore_test.go +++ b/src/internal/operations/restore_test.go @@ -437,7 +437,7 @@ func (suite *RestoreOpIntegrationSuite) TestRestore_Run() { ro, err := NewRestoreOperation( ctx, - control.Options{FailFast: true}, + control.Options{FailureHandling: control.FailFast}, suite.kw, suite.sw, bup.gc, diff --git a/src/pkg/control/options.go b/src/pkg/control/options.go index f57ae492d..0bc119f52 100644 --- a/src/pkg/control/options.go +++ b/src/pkg/control/options.go @@ -8,18 +8,29 @@ import ( type Options struct { Collision CollisionPolicy `json:"-"` DisableMetrics bool `json:"disableMetrics"` - FailFast bool `json:"failFast"` + FailureHandling FailureBehavior `json:"failureHandling"` + ItemFetchParallelism int `json:"itemFetchParallelism"` RestorePermissions bool `json:"restorePermissions"` SkipReduce bool `json:"skipReduce"` - ItemFetchParallelism int `json:"itemFetchParallelism"` ToggleFeatures Toggles `json:"ToggleFeatures"` } +type FailureBehavior string + +const ( + // fails and exits the run immediately + FailFast FailureBehavior = "fail-fast" + // recovers whenever possible, reports non-zero recoveries as a failure + FailAfterRecovery FailureBehavior = "fail-after-recovery" + // recovers whenever possible, does not report recovery as failure + BestEffort FailureBehavior = "best-effort" +) + // Defaults provides an Options with the default values set. func Defaults() Options { return Options{ - FailFast: true, - ToggleFeatures: Toggles{}, + FailureHandling: FailAfterRecovery, + ToggleFeatures: Toggles{}, } } diff --git a/src/pkg/repository/loadtest/repository_load_test.go b/src/pkg/repository/loadtest/repository_load_test.go index 72093a27f..19d67fca8 100644 --- a/src/pkg/repository/loadtest/repository_load_test.go +++ b/src/pkg/repository/loadtest/repository_load_test.go @@ -94,8 +94,8 @@ func initM365Repo(t *testing.T) ( st := tester.NewPrefixedS3Storage(t) ac := tester.NewM365Account(t) opts := control.Options{ - DisableMetrics: true, - FailFast: true, + DisableMetrics: true, + FailureHandling: control.FailFast, } repo, err := repository.Initialize(ctx, ac, st, opts) From 52de2a32e89603b631a1a7884287df37d8f2c90d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 06:09:46 +0000 Subject: [PATCH 08/37] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20tailwindcss?= =?UTF-8?q?=20from=203.3.0=20to=203.3.1=20in=20/website=20(#3010)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- website/package-lock.json | 14 +++++++------- website/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index f899e192d..a308b2218 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -34,7 +34,7 @@ "@iconify/react": "^4.1.0", "autoprefixer": "^10.4.14", "postcss": "^8.4.21", - "tailwindcss": "^3.3.0" + "tailwindcss": "^3.3.1" } }, "node_modules/@algolia/autocomplete-core": { @@ -12824,9 +12824,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.0.tgz", - "integrity": "sha512-hOXlFx+YcklJ8kXiCAfk/FMyr4Pm9ck477G0m/us2344Vuj355IpoEDB5UmGAsSpTBmr+4ZhjzW04JuFXkb/fw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", + "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", "dev": true, "dependencies": { "arg": "^5.0.2", @@ -23358,9 +23358,9 @@ } }, "tailwindcss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.0.tgz", - "integrity": "sha512-hOXlFx+YcklJ8kXiCAfk/FMyr4Pm9ck477G0m/us2344Vuj355IpoEDB5UmGAsSpTBmr+4ZhjzW04JuFXkb/fw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", + "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", "dev": true, "requires": { "arg": "^5.0.2", diff --git a/website/package.json b/website/package.json index 2550cca3b..e88d720bb 100644 --- a/website/package.json +++ b/website/package.json @@ -40,7 +40,7 @@ "@iconify/react": "^4.1.0", "autoprefixer": "^10.4.14", "postcss": "^8.4.21", - "tailwindcss": "^3.3.0" + "tailwindcss": "^3.3.1" }, "browserslist": { "production": [ From 4087b69a39e605d84297d9dc5a9e66987fb1f49d Mon Sep 17 00:00:00 2001 From: neha_gupta Date: Mon, 3 Apr 2023 16:13:48 +0530 Subject: [PATCH 09/37] Enhancement Sanity Test: verify permissions and defined data (#2938) onedrive - - verify permissions - grantedToV2 and roles - recursively check subfolder's data and permission Exchange - - since the data in email is huge, create custom data and check if that data is getting restored properly #### 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 - [x] :robot: Supportability/Tests - [x] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- .github/workflows/sanity-test.yaml | 34 ++- src/cmd/sanity_test/sanity_tests.go | 404 ++++++++++++++++--------- src/internal/common/time.go | 3 + src/internal/tester/resource_owners.go | 31 +- 4 files changed, 323 insertions(+), 149 deletions(-) diff --git a/.github/workflows/sanity-test.yaml b/.github/workflows/sanity-test.yaml index 2bce1ca57..57f988fe3 100644 --- a/.github/workflows/sanity-test.yaml +++ b/.github/workflows/sanity-test.yaml @@ -97,15 +97,32 @@ jobs: exit 1 fi + # generate new entries to roll into the next load test + # only runs if the test was successful + - name: New Data Creation + working-directory: ./src/cmd/factory + env: + AZURE_CLIENT_ID: ${{ secrets.CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} + AZURE_TENANT_ID: ${{ secrets.TENANT_ID }} + CORSO_M365_LOAD_TEST_USER_ID: ${{ secrets.CORSO_M365_LOAD_TEST_USER_ID }} + run: | + go run . exchange emails \ + --user ${{ env.CORSO_M365_TEST_USER_ID }} \ + --tenant ${{ env.AZURE_TENANT_ID }} \ + --destination Corso_Restore_st_${{ steps.repo-init.outputs.result }} \ + --count 4 + # run the tests - name: Backup exchange test id: exchange-test run: | ./corso backup create exchange \ --user "${CORSO_M365_TEST_USER_ID}" \ - --hide-progress \ - --json \ - 2>&1 | tee $TEST_RESULT/backup_exchange.txt + --hide-progress \ + --data 'email' \ + --json \ + 2>&1 | tee $TEST_RESULT/backup_exchange.txt resultjson=$(sed -e '1,/Completed Backups/d' $TEST_RESULT/backup_exchange.txt ) @@ -152,6 +169,7 @@ jobs: run: | set -euo pipefail ./corso restore exchange \ + --email-folder Corso_Restore_st_${{ steps.repo-init.outputs.result }} \ --hide-progress \ --backup "${{ steps.exchange-test.outputs.result }}" \ 2>&1 | tee $TEST_RESULT/exchange-restore-test.txt @@ -161,6 +179,7 @@ jobs: env: SANITY_RESTORE_FOLDER: ${{ steps.exchange-restore-test.outputs.result }} SANITY_RESTORE_SERVICE: "exchange" + TEST_DATA: Corso_Restore_st_${{ steps.repo-init.outputs.result }} run: | set -euo pipefail ./sanityCheck @@ -193,6 +212,7 @@ jobs: ./corso restore exchange \ --hide-progress \ --backup "${{ steps.exchange-incremental-test.outputs.result }}" \ + --email-folder Corso_Restore_st_${{ steps.repo-init.outputs.result }} \ 2>&1 | tee $TEST_RESULT/exchange-incremantal-restore-test.txt echo result=$(grep -i -e 'Restoring to folder ' $TEST_RESULT/exchange-incremantal-restore-test.txt | sed "s/Restoring to folder//" ) >> $GITHUB_OUTPUT @@ -200,6 +220,8 @@ jobs: env: SANITY_RESTORE_FOLDER: ${{ steps.exchange-incremantal-restore-test.outputs.result }} SANITY_RESTORE_SERVICE: "exchange" + TEST_DATA: Corso_Restore_st_${{ steps.repo-init.outputs.result }} + BASE_BACKUP: ${{ steps.exchange-restore-test.outputs.result }} run: | set -euo pipefail ./sanityCheck @@ -215,6 +237,7 @@ jobs: ./corso backup create onedrive \ --hide-progress \ --user "${CORSO_M365_TEST_USER_ID}" \ + --enable-permissions-backup \ --json \ 2>&1 | tee $TEST_RESULT/backup_onedrive.txt @@ -263,6 +286,7 @@ jobs: run: | set -euo pipefail ./corso restore onedrive \ + --restore-permissions \ --hide-progress \ --backup "${{ steps.onedrive-test.outputs.result }}" \ 2>&1 | tee $TEST_RESULT/onedrive-restore-test.txt @@ -283,7 +307,8 @@ jobs: set -euo pipefail ./corso backup create onedrive \ --hide-progress \ - --user "${CORSO_M365_TEST_USER_ID}"\ + --user "${CORSO_M365_TEST_USER_ID}" \ + --enable-permissions-backup \ --json \ 2>&1 | tee $TEST_RESULT/backup_onedrive_incremental.txt @@ -303,6 +328,7 @@ jobs: run: | set -euo pipefail ./corso restore onedrive \ + --restore-permissions \ --hide-progress \ --backup "${{ steps.onedrive-incremental-test.outputs.result }}" \ 2>&1 | tee $TEST_RESULT/onedrive-incremental-restore-test.txt diff --git a/src/cmd/sanity_test/sanity_tests.go b/src/cmd/sanity_test/sanity_tests.go index 82f0f1002..40c4acbfc 100644 --- a/src/cmd/sanity_test/sanity_tests.go +++ b/src/cmd/sanity_test/sanity_tests.go @@ -13,15 +13,21 @@ import ( msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go" "github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/microsoftgraph/msgraph-sdk-go/users" - "golang.org/x/exp/maps" "golang.org/x/exp/slices" "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/pkg/filters" "github.com/alcionai/corso/src/pkg/logger" ) +type permissionInfo struct { + entityID string + roles []string +} + func main() { ctx, log := logger.Seed(context.Background(), "info", logger.GetLogFile("")) defer func() { @@ -29,7 +35,7 @@ func main() { }() adapter, err := graph.CreateAdapter( - os.Getenv("AZURE_TENANT_ID"), + tester.GetM365TenantID(ctx), os.Getenv("AZURE_CLIENT_ID"), os.Getenv("AZURE_CLIENT_SECRET")) if err != nil { @@ -37,11 +43,13 @@ func main() { } var ( - client = msgraphsdk.NewGraphServiceClient(adapter) - testUser = os.Getenv("CORSO_M365_TEST_USER_ID") - testService = os.Getenv("SANITY_RESTORE_SERVICE") - folder = strings.TrimSpace(os.Getenv("SANITY_RESTORE_FOLDER")) - startTime, _ = mustGetTimeFromName(ctx, folder) + client = msgraphsdk.NewGraphServiceClient(adapter) + testUser = tester.GetM365UserID(ctx) + testService = os.Getenv("SANITY_RESTORE_SERVICE") + folder = strings.TrimSpace(os.Getenv("SANITY_RESTORE_FOLDER")) + startTime, _ = mustGetTimeFromName(ctx, folder) + dataFolder = os.Getenv("TEST_DATA") + baseBackupFolder = os.Getenv("BASE_BACKUP") ) ctx = clues.Add( @@ -55,7 +63,7 @@ func main() { switch testService { case "exchange": - checkEmailRestoration(ctx, client, testUser, folder, startTime) + checkEmailRestoration(ctx, client, testUser, folder, dataFolder, baseBackupFolder, startTime) case "onedrive": checkOnedriveRestoration(ctx, client, testUser, folder, startTime) default: @@ -68,13 +76,14 @@ func main() { func checkEmailRestoration( ctx context.Context, client *msgraphsdk.GraphServiceClient, - testUser, folderName string, + testUser, folderName, dataFolder, baseBackupFolder string, startTime time.Time, ) { var ( - itemCount = make(map[string]int32) - restoreFolder models.MailFolderable - builder = client.UsersById(testUser).MailFolders() + restoreFolder models.MailFolderable + itemCount = make(map[string]int32) + restoreItemCount = make(map[string]int32) + builder = client.UsersById(testUser).MailFolders() ) for { @@ -85,29 +94,20 @@ func checkEmailRestoration( values := result.GetValue() - // recursive restore folder discovery before proceeding with tests for _, v := range values { - var ( - itemID = ptr.Val(v.GetId()) - itemName = ptr.Val(v.GetDisplayName()) - ictx = clues.Add(ctx, "item_id", itemID, "item_name", itemName) - folderTime, hasTime = mustGetTimeFromName(ctx, itemName) - ) + itemName := ptr.Val(v.GetDisplayName()) - if !isWithinTimeBound(ictx, startTime, folderTime, hasTime) { - continue - } - - // if we found the folder to testt against, back out of this loop. if itemName == folderName { restoreFolder = v continue } - // otherwise, recursively aggregate all child folders. - getAllSubFolder(ctx, client, testUser, v, itemName, itemCount) + if itemName == dataFolder || itemName == baseBackupFolder { + // otherwise, recursively aggregate all child folders. + getAllSubFolder(ctx, client, testUser, v, itemName, dataFolder, itemCount) - itemCount[itemName] = ptr.Val(v.GetTotalItemCount()) + itemCount[itemName] = ptr.Val(v.GetTotalItemCount()) + } } link, ok := ptr.ValOK(result.GetOdataNextLink()) @@ -135,28 +135,36 @@ func checkEmailRestoration( } for _, fld := range childFolder.GetValue() { - var ( - fldID = ptr.Val(fld.GetId()) - fldName = ptr.Val(fld.GetDisplayName()) - count = ptr.Val(fld.GetTotalItemCount()) - ictx = clues.Add( - ctx, - "child_folder_id", fldID, - "child_folder_name", fldName, - "expected_count", itemCount[fldName], - "actual_count", count) - ) + restoreDisplayName := ptr.Val(fld.GetDisplayName()) + + // check if folder is the data folder we loaded or the base backup to verify + // the incremental backup worked fine + if strings.EqualFold(restoreDisplayName, dataFolder) || strings.EqualFold(restoreDisplayName, baseBackupFolder) { + count, _ := ptr.ValOK(fld.GetTotalItemCount()) + + restoreItemCount[restoreDisplayName] = count + checkAllSubFolder(ctx, client, fld, testUser, restoreDisplayName, dataFolder, restoreItemCount) + } + } + + verifyEmailData(ctx, restoreItemCount, itemCount) +} + +func verifyEmailData(ctx context.Context, restoreMessageCount, messageCount map[string]int32) { + for fldName, emailCount := range messageCount { + if restoreMessageCount[fldName] != emailCount { + logger.Ctx(ctx).Errorw( + "test failure: Restore item counts do not match", + "expected:", emailCount, + "actual:", restoreMessageCount[fldName]) + + fmt.Println( + "test failure: Restore item counts do not match", + "* expected:", emailCount, + "* actual:", restoreMessageCount[fldName]) - if itemCount[fldName] != count { - logger.Ctx(ictx).Error("test failure: Restore item counts do not match") - fmt.Println("Restore item counts do not match:") - fmt.Println("* expected:", itemCount[fldName]) - fmt.Println("* actual:", count) - fmt.Println("Folder:", fldName, ptr.Val(fld.GetId())) os.Exit(1) } - - checkAllSubFolder(ctx, client, testUser, fld, fldName, itemCount) } } @@ -167,7 +175,8 @@ func getAllSubFolder( client *msgraphsdk.GraphServiceClient, testUser string, r models.MailFolderable, - parentFolder string, + parentFolder, + dataFolder string, messageCount map[string]int32, ) { var ( @@ -195,16 +204,18 @@ func getAllSubFolder( var ( childDisplayName = ptr.Val(child.GetDisplayName()) childFolderCount = ptr.Val(child.GetChildFolderCount()) - fullFolderName = parentFolder + "/" + childDisplayName + //nolint:forbidigo + fullFolderName = path.Join(parentFolder, childDisplayName) ) - messageCount[fullFolderName], _ = ptr.ValOK(child.GetTotalItemCount()) + if filters.PathContains([]string{dataFolder}).Compare(fullFolderName) { + messageCount[fullFolderName] = ptr.Val(child.GetTotalItemCount()) + // recursively check for subfolders + if childFolderCount > 0 { + parentFolder := fullFolderName - // recursively check for subfolders - if childFolderCount > 0 { - parentFolder := fullFolderName - - getAllSubFolder(ctx, client, testUser, child, parentFolder, messageCount) + getAllSubFolder(ctx, client, testUser, child, parentFolder, dataFolder, messageCount) + } } } } @@ -214,10 +225,11 @@ func getAllSubFolder( func checkAllSubFolder( ctx context.Context, client *msgraphsdk.GraphServiceClient, - testUser string, r models.MailFolderable, - parentFolder string, - messageCount map[string]int32, + testUser, + parentFolder, + dataFolder string, + restoreMessageCount map[string]int32, ) { var ( folderID = ptr.Val(r.GetId()) @@ -241,23 +253,20 @@ func checkAllSubFolder( for _, child := range childFolder.GetValue() { var ( childDisplayName = ptr.Val(child.GetDisplayName()) - childTotalCount = ptr.Val(child.GetTotalItemCount()) //nolint:forbidigo fullFolderName = path.Join(parentFolder, childDisplayName) ) - if messageCount[fullFolderName] != childTotalCount { - fmt.Println("Message count doesn't match:") - fmt.Println("* expected:", messageCount[fullFolderName]) - fmt.Println("* actual:", childTotalCount) - fmt.Println("Item:", fullFolderName, folderID) - os.Exit(1) + if filters.PathContains([]string{dataFolder}).Compare(fullFolderName) { + childTotalCount, _ := ptr.ValOK(child.GetTotalItemCount()) + restoreMessageCount[fullFolderName] = childTotalCount } childFolderCount := ptr.Val(child.GetChildFolderCount()) if childFolderCount > 0 { - checkAllSubFolder(ctx, client, testUser, child, fullFolderName, messageCount) + parentFolder := fullFolderName + checkAllSubFolder(ctx, client, child, testUser, parentFolder, dataFolder, restoreMessageCount) } } } @@ -265,14 +274,17 @@ func checkAllSubFolder( func checkOnedriveRestoration( ctx context.Context, client *msgraphsdk.GraphServiceClient, - testUser, folderName string, + testUser, + folderName string, startTime time.Time, ) { var ( // map itemID -> item size fileSizes = make(map[string]int64) // map itemID -> permission id -> []permission roles - folderPermission = make(map[string]map[string][]string) + folderPermission = make(map[string][]permissionInfo) + restoreFile = make(map[string]int64) + restoreFolderPermission = make(map[string][]permissionInfo) ) drive, err := client. @@ -313,7 +325,6 @@ func checkOnedriveRestoration( } folderTime, hasTime := mustGetTimeFromName(ictx, itemName) - if !isWithinTimeBound(ctx, startTime, folderTime, hasTime) { continue } @@ -323,21 +334,185 @@ func checkOnedriveRestoration( fileSizes[itemName] = ptr.Val(driveItem.GetSize()) } - folderPermission[itemID] = permissionsIn(ctx, client, driveID, itemID, folderPermission[itemID]) + if driveItem.GetFolder() == nil && driveItem.GetPackage() == nil { + continue + } + + // currently we don't restore blank folders. + // skip permission check for empty folders + if ptr.Val(driveItem.GetFolder().GetChildCount()) == 0 { + logger.Ctx(ctx).Info("skipped empty folder: ", itemName) + fmt.Println("skipped empty folder: ", itemName) + + continue + } + + permissionIn(ctx, client, driveID, itemID, itemName, folderPermission) + getOneDriveChildFolder(ctx, client, driveID, itemID, itemName, fileSizes, folderPermission, startTime) } - checkFileData(ctx, client, driveID, restoreFolderID, fileSizes, folderPermission) + getRestoreData(ctx, client, *drive.GetId(), restoreFolderID, restoreFile, restoreFolderPermission, startTime) + + for folderName, permissions := range folderPermission { + logger.Ctx(ctx).Info("checking for folder: %s \n", folderName) + fmt.Printf("checking for folder: %s \n", folderName) + + restoreFolderPerm := restoreFolderPermission[folderName] + + if len(permissions) < 1 { + logger.Ctx(ctx).Info("no permissions found for folder :", folderName) + fmt.Println("no permissions found for folder :", folderName) + + continue + } + + if len(restoreFolderPerm) < 1 { + logger.Ctx(ctx).Info("permission roles are not equal for :", + "Item:", folderName, + "* Permission found: ", permissions, + "* blank permission found in restore.") + + fmt.Println("permission roles are not equal for:") + fmt.Println("Item:", folderName) + fmt.Println("* Permission found: ", permissions) + fmt.Println("blank permission found in restore.") + + os.Exit(1) + } + + for i, orginalPerm := range permissions { + restorePerm := restoreFolderPerm[i] + + if !(orginalPerm.entityID != restorePerm.entityID) && + !slices.Equal(orginalPerm.roles, restorePerm.roles) { + logger.Ctx(ctx).Info("permission roles are not equal for :", + "Item:", folderName, + "* Original permission: ", orginalPerm.entityID, + "* Restored permission: ", restorePerm.entityID) + + fmt.Println("permission roles are not equal for:") + fmt.Println("Item:", folderName) + fmt.Println("* Original permission: ", orginalPerm.entityID) + fmt.Println("* Restored permission: ", restorePerm.entityID) + os.Exit(1) + } + } + } + + for fileName, fileSize := range fileSizes { + if fileSize != restoreFile[fileName] { + logger.Ctx(ctx).Info("File size does not match for:", + "Item:", fileName, + "* expected:", fileSize, + "* actual:", restoreFile[fileName]) + + fmt.Println("File size does not match for:") + fmt.Println("item:", fileName) + fmt.Println("* expected:", fileSize) + fmt.Println("* actual:", restoreFile[fileName]) + os.Exit(1) + } + } fmt.Println("Success") } -func checkFileData( +func getOneDriveChildFolder( ctx context.Context, client *msgraphsdk.GraphServiceClient, - driveID, - restoreFolderID string, + driveID, itemID, parentName string, fileSizes map[string]int64, - folderPermission map[string]map[string][]string, + folderPermission map[string][]permissionInfo, + startTime time.Time, +) { + response, err := client.DrivesById(driveID).ItemsById(itemID).Children().Get(ctx, nil) + if err != nil { + fatal(ctx, "getting child folder", err) + } + + for _, driveItem := range response.GetValue() { + var ( + itemID = ptr.Val(driveItem.GetId()) + itemName = ptr.Val(driveItem.GetName()) + fullName = parentName + "/" + itemName + ) + + folderTime, hasTime := mustGetTimeFromName(ctx, itemName) + if !isWithinTimeBound(ctx, startTime, folderTime, hasTime) { + continue + } + + // if it's a file check the size + if driveItem.GetFile() != nil { + fileSizes[fullName] = ptr.Val(driveItem.GetSize()) + } + + if driveItem.GetFolder() == nil && driveItem.GetPackage() == nil { + continue + } + + // currently we don't restore blank folders. + // skip permission check for empty folders + if ptr.Val(driveItem.GetFolder().GetChildCount()) == 0 { + logger.Ctx(ctx).Info("skipped empty folder: ", fullName) + fmt.Println("skipped empty folder: ", fullName) + + continue + } + + permissionIn(ctx, client, driveID, itemID, fullName, folderPermission) + getOneDriveChildFolder(ctx, client, driveID, itemID, fullName, fileSizes, folderPermission, startTime) + } +} + +func permissionIn( + ctx context.Context, + client *msgraphsdk.GraphServiceClient, + driveID, itemID, folderName string, + permMap map[string][]permissionInfo, +) { + permMap[folderName] = []permissionInfo{} + + pcr, err := client. + DrivesById(driveID). + ItemsById(itemID). + Permissions(). + Get(ctx, nil) + if err != nil { + fatal(ctx, "getting permission", err) + } + + for _, perm := range pcr.GetValue() { + if perm.GetGrantedToV2() == nil { + continue + } + + var ( + gv2 = perm.GetGrantedToV2() + perInfo = permissionInfo{} + ) + + if gv2.GetUser() != nil { + perInfo.entityID = ptr.Val(gv2.GetUser().GetId()) + } else if gv2.GetGroup() != nil { + perInfo.entityID = ptr.Val(gv2.GetGroup().GetId()) + } + + perInfo.roles = perm.GetRoles() + + slices.Sort(perInfo.roles) + + permMap[folderName] = append(permMap[folderName], perInfo) + } +} + +func getRestoreData( + ctx context.Context, + client *msgraphsdk.GraphServiceClient, + driveID, restoreFolderID string, + restoreFile map[string]int64, + restoreFolder map[string][]permissionInfo, + startTime time.Time, ) { restored, err := client. DrivesById(driveID). @@ -356,14 +531,7 @@ func checkFileData( ) if item.GetFile() != nil { - if itemSize != fileSizes[itemName] { - fmt.Println("File size does not match:") - fmt.Println("* expected:", fileSizes[itemName]) - fmt.Println("* actual:", itemSize) - fmt.Println("Item:", itemName, itemID) - os.Exit(1) - } - + restoreFile[itemName] = itemSize continue } @@ -371,23 +539,8 @@ func checkFileData( continue } - var ( - expectItem = folderPermission[itemID] - results = permissionsIn(ctx, client, driveID, itemID, nil) - ) - - for pid, result := range results { - expect := expectItem[pid] - - if !slices.Equal(expect, result) { - fmt.Println("permissions are not equal") - fmt.Println("* expected: ", expect) - fmt.Println("* actual: ", result) - fmt.Println("Item:", itemName, itemID) - fmt.Println("Permission:", pid) - os.Exit(1) - } - } + permissionIn(ctx, client, driveID, itemID, itemName, restoreFolder) + getOneDriveChildFolder(ctx, client, driveID, itemID, itemName, restoreFile, restoreFolder, startTime) } } @@ -401,41 +554,6 @@ func fatal(ctx context.Context, msg string, err error) { os.Exit(1) } -func permissionsIn( - ctx context.Context, - client *msgraphsdk.GraphServiceClient, - driveID, itemID string, - init map[string][]string, -) map[string][]string { - result := map[string][]string{} - - pcr, err := client. - DrivesById(driveID). - ItemsById(itemID). - Permissions(). - Get(ctx, nil) - if err != nil { - fatal(ctx, "getting permission", err) - } - - if len(init) > 0 { - maps.Copy(result, init) - } - - for _, p := range pcr.GetValue() { - var ( - pid = ptr.Val(p.GetId()) - roles = p.GetRoles() - ) - - slices.Sort(roles) - - result[pid] = roles - } - - return result -} - func mustGetTimeFromName(ctx context.Context, name string) (time.Time, bool) { t, err := common.ExtractTime(name) if err != nil && !errors.Is(err, common.ErrNoTimeString) { @@ -445,17 +563,15 @@ func mustGetTimeFromName(ctx context.Context, name string) (time.Time, bool) { return t, !errors.Is(err, common.ErrNoTimeString) } -func isWithinTimeBound(ctx context.Context, bound, check time.Time, skip bool) bool { - if skip { - return true - } +func isWithinTimeBound(ctx context.Context, bound, check time.Time, hasTime bool) bool { + if hasTime { + if bound.Before(check) { + logger.Ctx(ctx). + With("boundary_time", bound, "check_time", check). + Info("skipping restore folder: not older than time bound") - if bound.Before(check) { - logger.Ctx(ctx). - With("boundary_time", bound, "check_time", check). - Info("skipping restore folder: not older than time bound") - - return false + return false + } } return true diff --git a/src/internal/common/time.go b/src/internal/common/time.go index 9a39a2a02..23db15b77 100644 --- a/src/internal/common/time.go +++ b/src/internal/common/time.go @@ -53,6 +53,7 @@ var ( dateOnlyRE = regexp.MustCompile(`.*(\d{4}-\d{2}-\d{2}).*`) legacyTimeRE = regexp.MustCompile( `.*(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}?([Zz]|[a-zA-Z]{2}|([\+|\-]([01]\d|2[0-3])))).*`) + simpleTimeTestingRE = regexp.MustCompile(`.*(\d{2}-[a-zA-Z]{3}-\d{4}_\d{2}-\d{2}-\d{2}.\d{6}).*`) simpleDateTimeRE = regexp.MustCompile(`.*(\d{2}-[a-zA-Z]{3}-\d{4}_\d{2}:\d{2}:\d{2}).*`) simpleDateTimeOneDriveRE = regexp.MustCompile(`.*(\d{2}-[a-zA-Z]{3}-\d{4}_\d{2}-\d{2}-\d{2}).*`) standardTimeRE = regexp.MustCompile( @@ -65,6 +66,7 @@ var ( // get eagerly chosen as the parsable format, slicing out some data. formats = []TimeFormat{ StandardTime, + SimpleTimeTesting, SimpleDateTime, SimpleDateTimeOneDrive, LegacyTime, @@ -75,6 +77,7 @@ var ( } regexes = []*regexp.Regexp{ standardTimeRE, + simpleTimeTestingRE, simpleDateTimeRE, simpleDateTimeOneDriveRE, legacyTimeRE, diff --git a/src/internal/tester/resource_owners.go b/src/internal/tester/resource_owners.go index c36386b96..b5a1625a0 100644 --- a/src/internal/tester/resource_owners.go +++ b/src/internal/tester/resource_owners.go @@ -1,12 +1,15 @@ package tester import ( + "context" "os" "strings" "testing" "github.com/alcionai/clues" "github.com/stretchr/testify/require" + + "github.com/alcionai/corso/src/pkg/logger" ) // M365TenantID returns a tenantID string representing the azureTenantID described @@ -15,7 +18,20 @@ import ( // last-attempt fallback that will only work on alcion's testing org. func M365TenantID(t *testing.T) string { cfg, err := readTestConfig() - require.NoError(t, err, "retrieving m365 user id from test configuration", clues.ToCore(err)) + require.NoError(t, err, "retrieving m365 tenant ID from test configuration", clues.ToCore(err)) + + return cfg[TestCfgAzureTenantID] +} + +// M365TenantID returns a tenantID string representing the azureTenantID described +// by either the env var AZURE_TENANT_ID, the corso_test.toml config +// file or the default value (in that order of priority). The default is a +// last-attempt fallback that will only work on alcion's testing org. +func GetM365TenantID(ctx context.Context) string { + cfg, err := readTestConfig() + if err != nil { + logger.Ctx(ctx).Error(err, "retrieving m365 tenant ID from test configuration") + } return cfg[TestCfgAzureTenantID] } @@ -31,6 +47,19 @@ func M365UserID(t *testing.T) string { return cfg[TestCfgUserID] } +// GetM365UserID returns an userID string representing the m365UserID described +// by either the env var CORSO_M365_TEST_USER_ID, the corso_test.toml config +// file or the default value (in that order of priority). The default is a +// last-attempt fallback that will only work on alcion's testing org. +func GetM365UserID(ctx context.Context) string { + cfg, err := readTestConfig() + if err != nil { + logger.Ctx(ctx).Error(err, "retrieving m365 user id from test configuration") + } + + return cfg[TestCfgUserID] +} + // SecondaryM365UserID returns an userID string representing the m365UserID // described by either the env var CORSO_SECONDARY_M365_TEST_USER_ID, the // corso_test.toml config file or the default value (in that order of priority). From dcf5ea241565c3008ea5113d88dc16332659b8c8 Mon Sep 17 00:00:00 2001 From: Keepers Date: Mon, 3 Apr 2023 08:40:01 -0600 Subject: [PATCH 10/37] update failure logs (#2998) Co-authored-by: aviator-app[bot] <48659329+aviator-app[bot]@users.noreply.github.com> --- src/cli/utils/utils.go | 2 +- src/internal/events/events.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cli/utils/utils.go b/src/cli/utils/utils.go index 9e829bf05..f22583c80 100644 --- a/src/cli/utils/utils.go +++ b/src/cli/utils/utils.go @@ -144,7 +144,7 @@ func SendStartCorsoEvent( ) { bus, err := events.NewBus(ctx, s, tenID, opts) if err != nil { - logger.Ctx(ctx).Infow("analytics event failure", "err", err) + logger.CtxErr(ctx, err).Info("sending start event") } bus.SetRepoID(repoID) diff --git a/src/internal/events/events.go b/src/internal/events/events.go index ed4cc5b05..da7f8cfe3 100644 --- a/src/internal/events/events.go +++ b/src/internal/events/events.go @@ -138,7 +138,7 @@ func (b Bus) Event(ctx context.Context, key string, data map[string]any) { Set(tenantID, b.tenant), }) if err != nil { - logger.Ctx(ctx).Debugw("analytics event failure", "err", err) + logger.CtxErr(ctx, err).Debug("analytics event failure: repo identity") } } @@ -149,7 +149,7 @@ func (b Bus) Event(ctx context.Context, key string, data map[string]any) { Properties: props, }) if err != nil { - logger.Ctx(ctx).Info("analytics event failure", "err", err) + logger.CtxErr(ctx, err).Info("analytics event failure: tracking event") } } From 4cc03970753b73e22ed83e774308a85e0c98daef Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Mon, 3 Apr 2023 23:02:44 +0530 Subject: [PATCH 11/37] Log responses for 503 (#3012) Currently we were logging rate limiting values for 503 which is not available and end up with empty values. Switching it to logging the response, similar to 404 as that can be more useful. --- #### 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 - [x] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/internal/connector/graph/service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/internal/connector/graph/service.go b/src/internal/connector/graph/service.go index 82f634d92..93251b730 100644 --- a/src/internal/connector/graph/service.go +++ b/src/internal/connector/graph/service.go @@ -319,13 +319,13 @@ func (handler *LoggingMiddleware) Intercept( msg := fmt.Sprintf("graph api error: %s", resp.Status) // special case for supportability: log all throttling cases. - if resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode == http.StatusServiceUnavailable { + if resp.StatusCode == http.StatusTooManyRequests { log = log.With( "limit", resp.Header.Get(rateLimitHeader), "remaining", resp.Header.Get(rateRemainingHeader), "reset", resp.Header.Get(rateResetHeader), "retry-after", resp.Header.Get(retryAfterHeader)) - } else if resp.StatusCode/100 == 4 { + } else if resp.StatusCode/100 == 4 || resp.StatusCode == http.StatusServiceUnavailable { log = log.With("response", getRespDump(ctx, resp, true)) } From f4f0c8c02f38e53a4b5bd13f2d827639890167c2 Mon Sep 17 00:00:00 2001 From: Keepers Date: Mon, 3 Apr 2023 12:11:21 -0600 Subject: [PATCH 12/37] wrap repo backup data.notfound errors (#3004) Adds a backupNotFound sentinel error that sdk consumers can use to easily identify when a backup did not produce any backup data. Also adds extra testing and mocks to support testing inside the repo package. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature - [x] :robot: Supportability/Tests #### Test Plan - [x] :muscle: Manual - [x] :zap: Unit test --- src/pkg/repository/repository.go | 77 +++++--- .../repository/repository_unexported_test.go | 166 ++++++++++++++++++ src/pkg/store/backup.go | 23 +++ src/pkg/store/backup_test.go | 20 +-- .../mock/{store_mock.go => model_store.go} | 20 +-- src/pkg/store/mock/wrapper.go | 38 ++++ 6 files changed, 304 insertions(+), 40 deletions(-) rename src/pkg/store/mock/{store_mock.go => model_store.go} (78%) create mode 100644 src/pkg/store/mock/wrapper.go diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 45eef688a..5c96e27e1 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -12,6 +12,7 @@ import ( "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/onedrive" + "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/events" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" @@ -30,7 +31,10 @@ import ( "github.com/alcionai/corso/src/pkg/store" ) -var ErrorRepoAlreadyExists = clues.New("a repository was already initialized with that configuration") +var ( + ErrorRepoAlreadyExists = clues.New("a repository was already initialized with that configuration") + ErrorBackupNotFound = clues.New("no backup exists with that id") +) // BackupGetter deals with retrieving metadata about backups from the // repository. @@ -329,10 +333,23 @@ func (r repository) NewRestore( r.Bus) } -// backups lists a backup by id +// Backup retrieves a backup by id. func (r repository) Backup(ctx context.Context, id string) (*backup.Backup, error) { - sw := store.NewKopiaStore(r.modelStore) - return sw.GetBackup(ctx, model.StableID(id)) + return getBackup(ctx, id, store.NewKopiaStore(r.modelStore)) +} + +// getBackup handles the processing for Backup. +func getBackup( + ctx context.Context, + id string, + sw store.BackupGetter, +) (*backup.Backup, error) { + b, err := sw.GetBackup(ctx, model.StableID(id)) + if err != nil { + return nil, errWrapper(err) + } + + return b, nil } // BackupsByID lists backups by ID. Returns as many backups as possible with @@ -349,7 +366,7 @@ func (r repository) Backups(ctx context.Context, ids []string) ([]*backup.Backup b, err := sw.GetBackup(ictx, model.StableID(id)) if err != nil { - errs.AddRecoverable(clues.Stack(err)) + errs.AddRecoverable(errWrapper(err)) } bups = append(bups, b) @@ -387,12 +404,12 @@ func getBackupDetails( ctx context.Context, backupID, tenantID string, kw *kopia.Wrapper, - sw *store.Wrapper, + sw store.BackupGetter, errs *fault.Bus, ) (*details.Details, *backup.Backup, error) { b, err := sw.GetBackup(ctx, model.StableID(backupID)) if err != nil { - return nil, nil, err + return nil, nil, errWrapper(err) } ssid := b.StreamStoreID @@ -457,12 +474,12 @@ func getBackupErrors( ctx context.Context, backupID, tenantID string, kw *kopia.Wrapper, - sw *store.Wrapper, + sw store.BackupGetter, errs *fault.Bus, ) (*fault.Errors, *backup.Backup, error) { b, err := sw.GetBackup(ctx, model.StableID(backupID)) if err != nil { - return nil, nil, err + return nil, nil, errWrapper(err) } ssid := b.StreamStoreID @@ -487,31 +504,43 @@ func getBackupErrors( return &fe, b, nil } +type snapshotDeleter interface { + DeleteSnapshot(ctx context.Context, snapshotID string) error +} + // DeleteBackup removes the backup from both the model store and the backup storage. func (r repository) DeleteBackup(ctx context.Context, id string) error { - bu, err := r.Backup(ctx, id) + return deleteBackup(ctx, id, r.dataLayer, store.NewKopiaStore(r.modelStore)) +} + +// deleteBackup handles the processing for Backup. +func deleteBackup( + ctx context.Context, + id string, + kw snapshotDeleter, + sw store.BackupGetterDeleter, +) error { + b, err := sw.GetBackup(ctx, model.StableID(id)) if err != nil { + return errWrapper(err) + } + + if err := kw.DeleteSnapshot(ctx, b.SnapshotID); err != nil { return err } - if err := r.dataLayer.DeleteSnapshot(ctx, bu.SnapshotID); err != nil { - return err - } - - if len(bu.SnapshotID) > 0 { - if err := r.dataLayer.DeleteSnapshot(ctx, bu.SnapshotID); err != nil { + if len(b.SnapshotID) > 0 { + if err := kw.DeleteSnapshot(ctx, b.SnapshotID); err != nil { return err } } - if len(bu.DetailsID) > 0 { - if err := r.dataLayer.DeleteSnapshot(ctx, bu.DetailsID); err != nil { + if len(b.DetailsID) > 0 { + if err := kw.DeleteSnapshot(ctx, b.DetailsID); err != nil { return err } } - sw := store.NewKopiaStore(r.modelStore) - return sw.DeleteBackup(ctx, model.StableID(id)) } @@ -590,3 +619,11 @@ func connectToM365( return gc, nil } + +func errWrapper(err error) error { + if errors.Is(err, data.ErrNotFound) { + return clues.Stack(ErrorBackupNotFound, err) + } + + return err +} diff --git a/src/pkg/repository/repository_unexported_test.go b/src/pkg/repository/repository_unexported_test.go index 2837978c3..9f7416615 100644 --- a/src/pkg/repository/repository_unexported_test.go +++ b/src/pkg/repository/repository_unexported_test.go @@ -5,10 +5,12 @@ import ( "testing" "github.com/alcionai/clues" + "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/internal/model" "github.com/alcionai/corso/src/internal/operations" @@ -20,8 +22,172 @@ import ( "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/selectors" "github.com/alcionai/corso/src/pkg/store" + "github.com/alcionai/corso/src/pkg/store/mock" ) +// --------------------------------------------------------------------------- +// Unit +// --------------------------------------------------------------------------- + +type RepositoryBackupsUnitSuite struct { + tester.Suite +} + +func TestRepositoryBackupsUnitSuite(t *testing.T) { + suite.Run(t, &RepositoryBackupsUnitSuite{Suite: tester.NewUnitSuite(t)}) +} + +func (suite *RepositoryBackupsUnitSuite) TestGetBackup() { + bup := &backup.Backup{ + BaseModel: model.BaseModel{ + ID: model.StableID(uuid.NewString()), + }, + } + + table := []struct { + name string + sw mock.BackupWrapper + expectErr func(t *testing.T, result error) + expectID model.StableID + }{ + { + name: "no error", + sw: mock.BackupWrapper{ + Backup: bup, + GetErr: nil, + DeleteErr: nil, + }, + expectErr: func(t *testing.T, result error) { + assert.NoError(t, result, clues.ToCore(result)) + }, + expectID: bup.ID, + }, + { + name: "get error", + sw: mock.BackupWrapper{ + Backup: bup, + GetErr: data.ErrNotFound, + DeleteErr: nil, + }, + expectErr: func(t *testing.T, result error) { + assert.ErrorIs(t, result, data.ErrNotFound, clues.ToCore(result)) + assert.ErrorIs(t, result, ErrorBackupNotFound, clues.ToCore(result)) + }, + expectID: bup.ID, + }, + } + for _, test := range table { + suite.Run(test.name, func() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + b, err := getBackup(ctx, string(bup.ID), test.sw) + test.expectErr(t, err) + + if err != nil { + return + } + + assert.Equal(t, test.expectID, b.ID) + }) + } +} + +type mockSSDeleter struct { + err error +} + +func (sd mockSSDeleter) DeleteSnapshot(_ context.Context, _ string) error { + return sd.err +} + +func (suite *RepositoryBackupsUnitSuite) TestDeleteBackup() { + bup := &backup.Backup{ + BaseModel: model.BaseModel{ + ID: model.StableID(uuid.NewString()), + }, + } + + table := []struct { + name string + sw mock.BackupWrapper + kw mockSSDeleter + expectErr func(t *testing.T, result error) + expectID model.StableID + }{ + { + name: "no error", + sw: mock.BackupWrapper{ + Backup: bup, + GetErr: nil, + DeleteErr: nil, + }, + kw: mockSSDeleter{}, + expectErr: func(t *testing.T, result error) { + assert.NoError(t, result, clues.ToCore(result)) + }, + expectID: bup.ID, + }, + { + name: "get error", + sw: mock.BackupWrapper{ + Backup: bup, + GetErr: data.ErrNotFound, + DeleteErr: nil, + }, + kw: mockSSDeleter{}, + expectErr: func(t *testing.T, result error) { + assert.ErrorIs(t, result, data.ErrNotFound, clues.ToCore(result)) + assert.ErrorIs(t, result, ErrorBackupNotFound, clues.ToCore(result)) + }, + expectID: bup.ID, + }, + { + name: "delete error", + sw: mock.BackupWrapper{ + Backup: bup, + GetErr: nil, + DeleteErr: assert.AnError, + }, + kw: mockSSDeleter{}, + expectErr: func(t *testing.T, result error) { + assert.ErrorIs(t, result, assert.AnError, clues.ToCore(result)) + }, + expectID: bup.ID, + }, + { + name: "snapshot delete error", + sw: mock.BackupWrapper{ + Backup: bup, + GetErr: nil, + DeleteErr: nil, + }, + kw: mockSSDeleter{assert.AnError}, + expectErr: func(t *testing.T, result error) { + assert.ErrorIs(t, result, assert.AnError, clues.ToCore(result)) + }, + expectID: bup.ID, + }, + } + for _, test := range table { + suite.Run(test.name, func() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + err := deleteBackup(ctx, string(bup.ID), test.kw, test.sw) + test.expectErr(t, err) + }) + } +} + +// --------------------------------------------------------------------------- +// integration +// --------------------------------------------------------------------------- + type RepositoryModelIntgSuite struct { tester.Suite kw *kopia.Wrapper diff --git a/src/pkg/store/backup.go b/src/pkg/store/backup.go index 85aeb2a8f..41ab97a1e 100644 --- a/src/pkg/store/backup.go +++ b/src/pkg/store/backup.go @@ -28,6 +28,29 @@ func (q *queryFilters) populate(qf ...FilterOption) { } } +type ( + BackupWrapper interface { + BackupGetterDeleter + GetBackups( + ctx context.Context, + filters ...FilterOption, + ) ([]*backup.Backup, error) + } + + BackupGetterDeleter interface { + BackupGetter + BackupDeleter + } + + BackupGetter interface { + GetBackup(ctx context.Context, backupID model.StableID) (*backup.Backup, error) + } + + BackupDeleter interface { + DeleteBackup(ctx context.Context, backupID model.StableID) error + } +) + // Service ensures the retrieved backups only match // the specified service. func Service(pst path.ServiceType) FilterOption { diff --git a/src/pkg/store/backup_test.go b/src/pkg/store/backup_test.go index c33cd8f58..9600ec67a 100644 --- a/src/pkg/store/backup_test.go +++ b/src/pkg/store/backup_test.go @@ -14,7 +14,7 @@ import ( "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/backup" "github.com/alcionai/corso/src/pkg/store" - storeMock "github.com/alcionai/corso/src/pkg/store/mock" + "github.com/alcionai/corso/src/pkg/store/mock" ) // ------------------------------------------------------------ @@ -48,17 +48,17 @@ func (suite *StoreBackupUnitSuite) TestGetBackup() { table := []struct { name string - mock *storeMock.MockModelStore + mock *mock.ModelStore expect assert.ErrorAssertionFunc }{ { name: "gets backup", - mock: storeMock.NewMock(&bu, nil), + mock: mock.NewModelStoreMock(&bu, nil), expect: assert.NoError, }, { name: "errors", - mock: storeMock.NewMock(&bu, assert.AnError), + mock: mock.NewModelStoreMock(&bu, assert.AnError), expect: assert.Error, }, } @@ -85,17 +85,17 @@ func (suite *StoreBackupUnitSuite) TestGetBackups() { table := []struct { name string - mock *storeMock.MockModelStore + mock *mock.ModelStore expect assert.ErrorAssertionFunc }{ { name: "gets backups", - mock: storeMock.NewMock(&bu, nil), + mock: mock.NewModelStoreMock(&bu, nil), expect: assert.NoError, }, { name: "errors", - mock: storeMock.NewMock(&bu, assert.AnError), + mock: mock.NewModelStoreMock(&bu, assert.AnError), expect: assert.Error, }, } @@ -123,17 +123,17 @@ func (suite *StoreBackupUnitSuite) TestDeleteBackup() { table := []struct { name string - mock *storeMock.MockModelStore + mock *mock.ModelStore expect assert.ErrorAssertionFunc }{ { name: "deletes backup", - mock: storeMock.NewMock(&bu, nil), + mock: mock.NewModelStoreMock(&bu, nil), expect: assert.NoError, }, { name: "errors", - mock: storeMock.NewMock(&bu, assert.AnError), + mock: mock.NewModelStoreMock(&bu, assert.AnError), expect: assert.Error, }, } diff --git a/src/pkg/store/mock/store_mock.go b/src/pkg/store/mock/model_store.go similarity index 78% rename from src/pkg/store/mock/store_mock.go rename to src/pkg/store/mock/model_store.go index 1e20f0bb9..15e47a972 100644 --- a/src/pkg/store/mock/store_mock.go +++ b/src/pkg/store/mock/model_store.go @@ -14,13 +14,13 @@ import ( // model wrapper model store // ------------------------------------------------------------ -type MockModelStore struct { +type ModelStore struct { backup *backup.Backup err error } -func NewMock(b *backup.Backup, err error) *MockModelStore { - return &MockModelStore{ +func NewModelStoreMock(b *backup.Backup, err error) *ModelStore { + return &ModelStore{ backup: b, err: err, } @@ -30,11 +30,11 @@ func NewMock(b *backup.Backup, err error) *MockModelStore { // deleter iface // ------------------------------------------------------------ -func (mms *MockModelStore) Delete(ctx context.Context, s model.Schema, id model.StableID) error { +func (mms *ModelStore) Delete(ctx context.Context, s model.Schema, id model.StableID) error { return mms.err } -func (mms *MockModelStore) DeleteWithModelStoreID(ctx context.Context, id manifest.ID) error { +func (mms *ModelStore) DeleteWithModelStoreID(ctx context.Context, id manifest.ID) error { return mms.err } @@ -42,7 +42,7 @@ func (mms *MockModelStore) DeleteWithModelStoreID(ctx context.Context, id manife // getter iface // ------------------------------------------------------------ -func (mms *MockModelStore) Get( +func (mms *ModelStore) Get( ctx context.Context, s model.Schema, id model.StableID, @@ -64,7 +64,7 @@ func (mms *MockModelStore) Get( return nil } -func (mms *MockModelStore) GetIDsForType( +func (mms *ModelStore) GetIDsForType( ctx context.Context, s model.Schema, tags map[string]string, @@ -82,7 +82,7 @@ func (mms *MockModelStore) GetIDsForType( return nil, clues.New("schema not supported by mock GetIDsForType").With("schema", s) } -func (mms *MockModelStore) GetWithModelStoreID( +func (mms *ModelStore) GetWithModelStoreID( ctx context.Context, s model.Schema, id manifest.ID, @@ -108,7 +108,7 @@ func (mms *MockModelStore) GetWithModelStoreID( // updater iface // ------------------------------------------------------------ -func (mms *MockModelStore) Put(ctx context.Context, s model.Schema, m model.Model) error { +func (mms *ModelStore) Put(ctx context.Context, s model.Schema, m model.Model) error { switch s { case model.BackupSchema: bm := m.(*backup.Backup) @@ -121,7 +121,7 @@ func (mms *MockModelStore) Put(ctx context.Context, s model.Schema, m model.Mode return mms.err } -func (mms *MockModelStore) Update(ctx context.Context, s model.Schema, m model.Model) error { +func (mms *ModelStore) Update(ctx context.Context, s model.Schema, m model.Model) error { switch s { case model.BackupSchema: bm := m.(*backup.Backup) diff --git a/src/pkg/store/mock/wrapper.go b/src/pkg/store/mock/wrapper.go new file mode 100644 index 000000000..3112fbdff --- /dev/null +++ b/src/pkg/store/mock/wrapper.go @@ -0,0 +1,38 @@ +package mock + +import ( + "context" + + "github.com/alcionai/clues" + + "github.com/alcionai/corso/src/internal/model" + "github.com/alcionai/corso/src/pkg/backup" + "github.com/alcionai/corso/src/pkg/store" +) + +type BackupWrapper struct { + Backup *backup.Backup + GetErr error + DeleteErr error +} + +func (bw BackupWrapper) GetBackup( + ctx context.Context, + backupID model.StableID, +) (*backup.Backup, error) { + return bw.Backup, bw.GetErr +} + +func (bw BackupWrapper) DeleteBackup( + ctx context.Context, + backupID model.StableID, +) error { + return bw.DeleteErr +} + +func (bw BackupWrapper) GetBackups( + ctx context.Context, + filters ...store.FilterOption, +) ([]*backup.Backup, error) { + return nil, clues.New("GetBackups mock not implemented yet") +} From 16d1e68ebfc340cd7a545a5029c2dd00c3cfbcec Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Mon, 3 Apr 2023 13:22:31 -0700 Subject: [PATCH 13/37] Populate location for all Exchange data types (#2829) Always populate the location field of backup details for Exchange data types Fix bug where ParentPath for calendar items used folder IDs instead of display names --- #### Does this PR need a docs update or release note? - [x] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [ ] :no_entry: No #### Type of change - [x] :sunflower: Feature - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Test - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * #2486 * closes #2827 merge after: * #2826 * #2808 * #2828 #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- CHANGELOG.md | 2 +- src/internal/connector/exchange/exchange_data_collection.go | 4 +--- src/internal/connector/exchange/service_iterators.go | 4 ---- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 357e5f8f9..0ac5b3dc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,8 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Enable compression for all data uploaded by kopia. - SharePoint --folder selectors correctly return items. - Fix Exchange cli args for filtering items -- Skip huge OneNote items that Graph API prevents us from downloading - Skip OneNote items bigger than 2GB (Graph API prevents us from downloading them) +- ParentPath of json output for Exchange calendar now shows names instead of IDs. ## [v0.6.1] (beta) - 2023-03-21 diff --git a/src/internal/connector/exchange/exchange_data_collection.go b/src/internal/connector/exchange/exchange_data_collection.go index 3a0d9c1a8..d8e1cc2e7 100644 --- a/src/internal/connector/exchange/exchange_data_collection.go +++ b/src/internal/connector/exchange/exchange_data_collection.go @@ -7,7 +7,6 @@ import ( "bytes" "context" "io" - "strings" "sync" "sync/atomic" "time" @@ -83,7 +82,6 @@ type Collection struct { // LocationPath contains the path with human-readable display names. // IE: "/Inbox/Important" instead of "/abcdxyz123/algha=lgkhal=t" - // Currently only implemented for Exchange Calendars. locationPath path.Path state data.CollectionState @@ -281,7 +279,7 @@ func (col *Collection) streamItems(ctx context.Context, errs *fault.Bus) { } info.Size = int64(len(data)) - info.ParentPath = strings.Join(col.fullPath.Folders(), "/") + info.ParentPath = col.locationPath.Folder(true) col.data <- &Stream{ id: id, diff --git a/src/internal/connector/exchange/service_iterators.go b/src/internal/connector/exchange/service_iterators.go index a014f0797..29551b21b 100644 --- a/src/internal/connector/exchange/service_iterators.go +++ b/src/internal/connector/exchange/service_iterators.go @@ -115,10 +115,6 @@ func filterContainersAndFillCollections( deltaURLs[cID] = newDelta.URL } - if qp.Category != path.EventsCategory { - locPath = nil - } - edc := NewCollection( qp.ResourceOwner, currPath, From 9a8ec2505f212b5f866b793956be298be57e0a40 Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Mon, 3 Apr 2023 13:57:08 -0700 Subject: [PATCH 14/37] Pull in modified kopia for mem usage (#3014) Reduce memory usage some by using a custom version of kopia that parses some json in a more manual fashion. Manually tested against an old corso repo last updated in Jan but made in Oct of last year and ran with no issues. Did not test compaction in kopia specificially --- #### 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 - [x] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue * #3016 #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/go.mod | 18 ++++++++++-------- src/go.sum | 36 ++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/go.mod b/src/go.mod index e51d46bc5..307b5d92f 100644 --- a/src/go.mod +++ b/src/go.mod @@ -2,11 +2,13 @@ module github.com/alcionai/corso/src go 1.19 +replace github.com/kopia/kopia => github.com/alcionai/kopia v0.12.2-0.20230403174648-98bfae225045 + require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0 github.com/armon/go-metrics v0.4.0 - github.com/aws/aws-sdk-go v1.44.220 + github.com/aws/aws-sdk-go v1.44.233 github.com/aws/aws-xray-sdk-go v1.8.1 github.com/cenkalti/backoff/v4 v4.2.0 github.com/google/uuid v1.3.0 @@ -69,13 +71,13 @@ require ( github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.16.3 // indirect - github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/klauspost/pgzip v1.2.5 // indirect github.com/klauspost/reedsolomon v1.11.7 // indirect github.com/kylelemons/godebug v1.1.0 // indirect @@ -86,7 +88,7 @@ require ( github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/microsoft/kiota-serialization-text-go v0.7.0 github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/minio-go/v7 v7.0.49 // indirect + github.com/minio/minio-go/v7 v7.0.50 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -110,16 +112,16 @@ require ( go.opentelemetry.io/otel v1.14.0 // indirect go.opentelemetry.io/otel/trace v1.14.0 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.9.0 // indirect + go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.7.0 // indirect golang.org/x/mod v0.9.0 // indirect golang.org/x/net v0.8.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.6.0 // indirect golang.org/x/text v0.8.0 // indirect - google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488 // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.29.1 // indirect + google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 // indirect + google.golang.org/grpc v1.54.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/src/go.sum b/src/go.sum index 4dc26b435..06d249bd7 100644 --- a/src/go.sum +++ b/src/go.sum @@ -55,6 +55,8 @@ github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpH github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0 h1:2Fv5zc02wURwUv3Gjo3oqGybSj5tNaXyNIijlrR8SI0= github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0/go.mod h1:DeaMbAwDvYM6ZfPMR/GUl3hceqI5C8jIQ1lstjB2IW8= +github.com/alcionai/kopia v0.12.2-0.20230403174648-98bfae225045 h1:KalMY/JU+3t/3IosvP8yLdUWqcy+mAupTjFeV7I+wHg= +github.com/alcionai/kopia v0.12.2-0.20230403174648-98bfae225045/go.mod h1:WGFVh9/5R3bi6vgGw7pPR65I32cyKJjb854467Goz0w= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -64,8 +66,8 @@ github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/aws/aws-sdk-go v1.44.220 h1:yAj99qAt0Htjle9Up3DglgHfOP77lmFPrElA4jKnrBo= -github.com/aws/aws-sdk-go v1.44.220/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.233 h1:KB3p/yL32oG/aF4Ld0Ui9CU0tdezvhX6Xdqpb8vyP3U= +github.com/aws/aws-sdk-go v1.44.233/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-xray-sdk-go v1.8.1 h1:O4pXV+hnCskaamGsZnFpzHyAmgPGusBMN6i7nnsy0Fo= github.com/aws/aws-xray-sdk-go v1.8.1/go.mod h1:wMmVYzej3sykAttNBkXQHK/+clAPWTOrPiajEk7Cp3A= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -158,8 +160,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -233,16 +235,14 @@ github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQs github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= -github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.11.7 h1:9uaHU0slncktTEEg4+7Vl7q7XUNMBUOK4R9gnKhMjAU= github.com/klauspost/reedsolomon v1.11.7/go.mod h1:4bXRN+cVzMdml6ti7qLouuYi32KHJ5MGv0Qd8a47h6A= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kopia/htmluibuild v0.0.0-20230326183719-f482ef17e2c9 h1:s5Wa89s8RlPjuwqd8K8kuf+T9Kz4+NsbKwR/pJ3PAT0= -github.com/kopia/kopia v0.12.2-0.20230327171220-747baeebdab1 h1:C4Z3JlYWxg/o3EQCjlLcHv9atJXL9j8J1m0scNzjNDQ= -github.com/kopia/kopia v0.12.2-0.20230327171220-747baeebdab1/go.mod h1:D1k/M4+8zCL4ExSawl10G5qKhcky9MNuMwYAtH8jR4c= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -287,8 +287,8 @@ github.com/microsoftgraph/msgraph-sdk-go-core v0.33.0 h1:cDL3ov/IZ2ZarUJdGGPsdR+ github.com/microsoftgraph/msgraph-sdk-go-core v0.33.0/go.mod h1:d0mU3PQAWnN/C4CwPJEZz2QhesrnR5UDnqRu2ODWPkI= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.49 h1:dE5DfOtnXMXCjr/HWI6zN9vCrY6Sv666qhhiwUMvGV4= -github.com/minio/minio-go/v7 v7.0.49/go.mod h1:UI34MvQEiob3Cf/gGExGMmzugkM/tNgbFypNDy5LMVc= +github.com/minio/minio-go/v7 v7.0.50 h1:4IL4V8m/kI90ZL6GupCARZVrBv8/XrcKcJhaJ3iz68k= +github.com/minio/minio-go/v7 v7.0.50/go.mod h1:IbbodHyjUAguneyucUaahv+VMNs/EOTV9du7A7/Z3HU= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -432,8 +432,8 @@ go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+go go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -735,8 +735,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488 h1:QQF+HdiI4iocoxUjjpLgvTYDHKm99C/VtTBFnfiCJos= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 h1:khxVcsk/FhnzxMKOyD+TDGwjbEOpcPuIpmafPGFmhMA= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -753,8 +753,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -767,8 +767,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 99774e754bc54002d7c5e3797646f948bc1f3b94 Mon Sep 17 00:00:00 2001 From: Keepers Date: Mon, 3 Apr 2023 16:42:48 -0600 Subject: [PATCH 15/37] introduce idnamer (#2934) Adds a common interface: idNamer, which is used to pass around tuples of an id and a name for some resource. Also adds compliance to this iface in selectors, where a selector's ID and Name are the DiscreteOwner values. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Issue(s) * #2825 #### Test Plan - [x] :zap: Unit test - [x] :green_heart: E2E --- src/internal/common/idname.go | 9 ++++ src/internal/connector/data_collections.go | 3 +- .../connector/data_collections_test.go | 6 +-- .../connector/graph_connector_test.go | 9 ++-- .../mockconnector/mock_data_connector.go | 3 +- src/internal/operations/backup.go | 41 ++++++++--------- .../operations/backup_integration_test.go | 8 ++-- src/internal/operations/backup_test.go | 2 +- src/internal/operations/inject/inject.go | 3 +- src/internal/operations/restore_test.go | 4 +- src/pkg/repository/repository.go | 5 +- src/pkg/selectors/selectors.go | 46 ++++++++++++++++++- src/pkg/selectors/selectors_test.go | 43 +++++++++++++++++ 13 files changed, 140 insertions(+), 42 deletions(-) create mode 100644 src/internal/common/idname.go diff --git a/src/internal/common/idname.go b/src/internal/common/idname.go new file mode 100644 index 000000000..fdc767226 --- /dev/null +++ b/src/internal/common/idname.go @@ -0,0 +1,9 @@ +package common + +type IDNamer interface { + // the canonical id of the thing, generated and usable + // by whichever system has ownership of it. + ID() string + // the human-readable name of the thing. + Name() string +} diff --git a/src/internal/connector/data_collections.go b/src/internal/connector/data_collections.go index f7f2ba143..26a9a8a49 100644 --- a/src/internal/connector/data_collections.go +++ b/src/internal/connector/data_collections.go @@ -6,6 +6,7 @@ import ( "github.com/alcionai/clues" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/connector/discovery" "github.com/alcionai/corso/src/internal/connector/discovery/api" "github.com/alcionai/corso/src/internal/connector/exchange" @@ -34,7 +35,7 @@ import ( // prior history (ie, incrementals) and run a full backup. func (gc *GraphConnector) ProduceBackupCollections( ctx context.Context, - ownerID, ownerName string, + owner common.IDNamer, sels selectors.Selector, metadata []data.RestoreCollection, ctrlOpts control.Options, diff --git a/src/internal/connector/data_collections_test.go b/src/internal/connector/data_collections_test.go index 1d4b55373..a002fdc80 100644 --- a/src/internal/connector/data_collections_test.go +++ b/src/internal/connector/data_collections_test.go @@ -208,7 +208,7 @@ func (suite *ConnectorDataCollectionIntegrationSuite) TestDataCollections_invali collections, excludes, err := connector.ProduceBackupCollections( ctx, - owners[0], owners[0], + test.getSelector(t), test.getSelector(t), nil, control.Options{}, @@ -340,7 +340,7 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar cols, excludes, err := gc.ProduceBackupCollections( ctx, - siteIDs[0], siteIDs[0], + sel.Selector, sel.Selector, nil, control.Options{}, @@ -379,7 +379,7 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar cols, excludes, err := gc.ProduceBackupCollections( ctx, - siteIDs[0], siteIDs[0], + sel.Selector, sel.Selector, nil, control.Options{}, diff --git a/src/internal/connector/graph_connector_test.go b/src/internal/connector/graph_connector_test.go index dc8115134..5c45b3fa9 100644 --- a/src/internal/connector/graph_connector_test.go +++ b/src/internal/connector/graph_connector_test.go @@ -459,8 +459,7 @@ func runBackupAndCompare( start := time.Now() dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, - backupSel.DiscreteOwner, - backupSel.DiscreteOwner, + backupSel, backupSel, nil, config.opts, @@ -1000,8 +999,7 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, - backupSel.DiscreteOwner, - backupSel.DiscreteOwner, + backupSel, backupSel, nil, control.Options{ @@ -1154,8 +1152,7 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, - backupSel.DiscreteOwner, - backupSel.DiscreteOwner, + backupSel, backupSel, nil, control.Options{ diff --git a/src/internal/connector/mockconnector/mock_data_connector.go b/src/internal/connector/mockconnector/mock_data_connector.go index 453345a2c..6c5850bdb 100644 --- a/src/internal/connector/mockconnector/mock_data_connector.go +++ b/src/internal/connector/mockconnector/mock_data_connector.go @@ -3,6 +3,7 @@ package mockconnector import ( "context" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/backup/details" @@ -24,7 +25,7 @@ type GraphConnector struct { func (gc GraphConnector) ProduceBackupCollections( _ context.Context, - _, _ string, + _ common.IDNamer, _ selectors.Selector, _ []data.RestoreCollection, _ control.Options, diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 5f6259355..9d5af2860 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -33,8 +33,7 @@ import ( type BackupOperation struct { operation - ResourceOwner string `json:"resourceOwner"` - ResourceOwnerName string `json:"resourceOwnerName"` + ResourceOwner common.IDNamer Results BackupResults `json:"results"` Selectors selectors.Selector `json:"selectors"` @@ -63,22 +62,17 @@ func NewBackupOperation( bp inject.BackupProducer, acct account.Account, selector selectors.Selector, - ownerName string, + owner common.IDNamer, bus events.Eventer, ) (BackupOperation, error) { op := BackupOperation{ - operation: newOperation(opts, bus, kw, sw), - ResourceOwner: selector.DiscreteOwner, - ResourceOwnerName: ownerName, - Selectors: selector, - Version: "v0", - account: acct, - incremental: useIncrementalBackup(selector, opts), - bp: bp, - } - - if len(ownerName) == 0 { - op.ResourceOwnerName = op.ResourceOwner + operation: newOperation(opts, bus, kw, sw), + ResourceOwner: owner, + Selectors: selector, + Version: "v0", + account: acct, + incremental: useIncrementalBackup(selector, opts), + bp: bp, } if err := op.validate(); err != nil { @@ -89,10 +83,14 @@ func NewBackupOperation( } func (op BackupOperation) validate() error { - if len(op.ResourceOwner) == 0 { + if op.ResourceOwner == nil { return clues.New("backup requires a resource owner") } + if len(op.ResourceOwner.ID()) == 0 { + return clues.New("backup requires a resource owner with a populated ID") + } + if op.bp == nil { return clues.New("missing backup producer") } @@ -165,7 +163,7 @@ func (op *BackupOperation) Run(ctx context.Context) (err error) { // Execution // ----- - observe.Message(ctx, "Backing Up", observe.Bullet, clues.Hide(op.ResourceOwner)) + observe.Message(ctx, "Backing Up", observe.Bullet, clues.Hide(op.ResourceOwner.Name())) deets, err := op.do( ctx, @@ -253,7 +251,6 @@ func (op *BackupOperation) do( ctx, op.bp, op.ResourceOwner, - op.ResourceOwnerName, op.Selectors, mdColls, op.Options, @@ -327,7 +324,7 @@ func useIncrementalBackup(sel selectors.Selector, opts control.Options) bool { func produceBackupDataCollections( ctx context.Context, bp inject.BackupProducer, - ownerID, ownerName string, + resourceOwner common.IDNamer, sel selectors.Selector, metadata []data.RestoreCollection, ctrlOpts control.Options, @@ -340,7 +337,7 @@ func produceBackupDataCollections( closer() }() - return bp.ProduceBackupCollections(ctx, ownerID, ownerName, sel, metadata, ctrlOpts, errs) + return bp.ProduceBackupCollections(ctx, resourceOwner, sel, metadata, ctrlOpts, errs) } // --------------------------------------------------------------------------- @@ -717,8 +714,8 @@ func (op *BackupOperation) createBackupModels( op.Status.String(), backupID, op.Selectors, - op.ResourceOwner, - op.ResourceOwnerName, + op.ResourceOwner.ID(), + op.ResourceOwner.Name(), op.Results.ReadWrites, op.Results.StartAndEndTime, op.Errors.Errors()) diff --git a/src/internal/operations/backup_integration_test.go b/src/internal/operations/backup_integration_test.go index 1da1ac6ff..c87a3ec71 100644 --- a/src/internal/operations/backup_integration_test.go +++ b/src/internal/operations/backup_integration_test.go @@ -154,7 +154,7 @@ func newTestBackupOp( opts.ToggleFeatures = featureToggles - bo, err := NewBackupOperation(ctx, opts, kw, sw, gc, acct, sel, sel.DiscreteOwner, bus) + bo, err := NewBackupOperation(ctx, opts, kw, sw, gc, acct, sel, sel, bus) if !assert.NoError(t, err, clues.ToCore(err)) { closer() t.FailNow() @@ -566,6 +566,8 @@ func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() { ctx, flush := tester.NewContext() defer flush() + sel := selectors.Selector{DiscreteOwner: "test"} + _, err := NewBackupOperation( ctx, test.opts, @@ -573,8 +575,8 @@ func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() { test.sw, test.bp, test.acct, - selectors.Selector{DiscreteOwner: "test"}, - "test-name", + sel, + sel, evmock.NewBus()) test.errCheck(suite.T(), err, clues.ToCore(err)) }) diff --git a/src/internal/operations/backup_test.go b/src/internal/operations/backup_test.go index 96f9de9c7..8a519c456 100644 --- a/src/internal/operations/backup_test.go +++ b/src/internal/operations/backup_test.go @@ -415,7 +415,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() { gc, acct, sel, - sel.DiscreteOwner, + sel, evmock.NewBus()) require.NoError(t, err, clues.ToCore(err)) diff --git a/src/internal/operations/inject/inject.go b/src/internal/operations/inject/inject.go index dfc0c8cab..fa9339f50 100644 --- a/src/internal/operations/inject/inject.go +++ b/src/internal/operations/inject/inject.go @@ -3,6 +3,7 @@ package inject import ( "context" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/kopia" "github.com/alcionai/corso/src/pkg/account" @@ -17,7 +18,7 @@ type ( BackupProducer interface { ProduceBackupCollections( ctx context.Context, - ownerID, ownerName string, + resourceOwner common.IDNamer, sels selectors.Selector, metadata []data.RestoreCollection, ctrlOpts control.Options, diff --git a/src/internal/operations/restore_test.go b/src/internal/operations/restore_test.go index 33ac4a881..adc0fe55e 100644 --- a/src/internal/operations/restore_test.go +++ b/src/internal/operations/restore_test.go @@ -293,7 +293,7 @@ func setupExchangeBackup( gc, acct, bsel.Selector, - bsel.Selector.DiscreteOwner, + bsel.Selector, evmock.NewBus()) require.NoError(t, err, clues.ToCore(err)) @@ -350,7 +350,7 @@ func setupSharePointBackup( gc, acct, spsel.Selector, - spsel.Selector.DiscreteOwner, + spsel.Selector, evmock.NewBus()) require.NoError(t, err, clues.ToCore(err)) diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 5c96e27e1..1e340f9dc 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -296,6 +296,9 @@ func (r repository) NewBackup( return operations.BackupOperation{}, errors.Wrap(err, "connecting to m365") } + // TODO: retrieve display name from gc + sel = sel.SetDiscreteOwnerIDName(sel.DiscreteOwner, "") + return operations.NewBackupOperation( ctx, r.Opts, @@ -304,7 +307,7 @@ func (r repository) NewBackup( gc, r.Account, sel, - sel.DiscreteOwner, + sel, r.Bus) } diff --git a/src/pkg/selectors/selectors.go b/src/pkg/selectors/selectors.go index caf1f5cb1..17247b39b 100644 --- a/src/pkg/selectors/selectors.go +++ b/src/pkg/selectors/selectors.go @@ -112,6 +112,8 @@ type Selector struct { // iterate over the results, where each one will populate this field // with a different owner. DiscreteOwner string `json:"discreteOwner,omitempty"` + // display name for the DiscreteOwner. + DiscreteOwnerName string `json:"discreteOwnerName,omitempty"` // A slice of exclusion scopes. Exclusions apply globally to all // inclusions/filters, with any-match behavior. @@ -146,6 +148,48 @@ func (s Selector) DiscreteResourceOwners() []string { return split(s.ResourceOwners.Target) } +// SetDiscreteOwnerIDName ensures the selector has the correct discrete owner +// id and name. Assumes that these values are sourced using the current +// s.DiscreteOwner as input. The reason for taking in both the id and name, and +// not just the name, is so that constructors can input owner aliases in place +// of ids, with the expectation that the two will get sorted and re-written +// later on with this setter. +// +// If the id is empty, the original DiscreteOwner value is retained. +// If the name is empty, the id is duplicated as the name. +func (s Selector) SetDiscreteOwnerIDName(id, name string) Selector { + r := s + + if len(id) == 0 { + // assume a the discreteOwner is already set, and don't replace anything. + id = s.DiscreteOwner + } + + r.DiscreteOwner = id + r.DiscreteOwnerName = name + + if len(name) == 0 { + r.DiscreteOwnerName = id + } + + return r +} + +// ID returns s.discreteOwner, which is assumed to be a stable ID. +func (s Selector) ID() string { + return s.DiscreteOwner +} + +// Name returns s.discreteOwnerName. If that value is empty, it returns +// s.DiscreteOwner instead. +func (s Selector) Name() string { + if len(s.DiscreteOwnerName) == 0 { + return s.DiscreteOwner + } + + return s.DiscreteOwnerName +} + // isAnyResourceOwner returns true if the selector includes all resource owners. func isAnyResourceOwner(s Selector) bool { return s.ResourceOwners.Comparator == filters.Passes @@ -336,7 +380,7 @@ func pathCategoriesIn[T scopeT, C categoryT](ss []scope) []path.CategoryType { } // --------------------------------------------------------------------------- -// scope helpers +// scope constructors // --------------------------------------------------------------------------- type scopeConfig struct { diff --git a/src/pkg/selectors/selectors_test.go b/src/pkg/selectors/selectors_test.go index 8651d1823..28ed90198 100644 --- a/src/pkg/selectors/selectors_test.go +++ b/src/pkg/selectors/selectors_test.go @@ -248,6 +248,49 @@ func (suite *SelectorSuite) TestSplitByResourceOnwer() { } } +func (suite *SelectorSuite) TestIDName() { + table := []struct { + title string + id, name string + expectID, expectName string + }{ + {"empty", "", "", "", ""}, + {"only id", "id", "", "id", "id"}, + {"only name", "", "name", "", "name"}, + {"both", "id", "name", "id", "name"}, + } + for _, test := range table { + suite.Run(test.title, func() { + sel := Selector{DiscreteOwner: test.id, DiscreteOwnerName: test.name} + assert.Equal(suite.T(), test.expectID, sel.ID()) + assert.Equal(suite.T(), test.expectName, sel.Name()) + }) + } +} + +func (suite *SelectorSuite) TestSetDiscreteOwnerIDName() { + table := []struct { + title string + initID, initName string + id, name string + expectID, expectName string + }{ + {"empty", "", "", "", "", "", ""}, + {"only id", "", "", "id", "", "id", "id"}, + {"only name", "", "", "", "", "", ""}, + {"both", "", "", "id", "name", "id", "name"}, + {"both", "init-id", "", "", "name", "init-id", "name"}, + } + for _, test := range table { + suite.Run(test.title, func() { + sel := Selector{DiscreteOwner: test.initID, DiscreteOwnerName: test.initName} + sel = sel.SetDiscreteOwnerIDName(test.id, test.name) + assert.Equal(suite.T(), test.expectID, sel.ID()) + assert.Equal(suite.T(), test.expectName, sel.Name()) + }) + } +} + // TestPathCategories verifies that no scope produces a `path.UnknownCategory` func (suite *SelectorSuite) TestPathCategories_includes() { users := []string{"someuser@onmicrosoft.com"} From 9eb070c0bc888ec4b0258d5e18ac537b9d9fb26e Mon Sep 17 00:00:00 2001 From: Keepers Date: Mon, 3 Apr 2023 18:23:29 -0600 Subject: [PATCH 16/37] clean up exchangePurge output (#3009) Get contact counts isn't working. Just comments out the create for now. --- #### Type of change - [x] :bug: Bugfix #### Test Plan - [x] :muscle: Manual --- src/cmd/purge/scripts/exchangePurge.ps1 | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/cmd/purge/scripts/exchangePurge.ps1 b/src/cmd/purge/scripts/exchangePurge.ps1 index 63775d90a..90c905911 100644 --- a/src/cmd/purge/scripts/exchangePurge.ps1 +++ b/src/cmd/purge/scripts/exchangePurge.ps1 @@ -239,7 +239,7 @@ function Get-FoldersToPurge { } if ((IsNameMatch @IsNameMatchParams) -or (IsPrefixAndAgeMatch @IsPrefixAndAgeMatchParams)) { - Write-Host "`nFound desired folder to purge: $folderName ($folderCreateTime)" + Write-Host "• Found: $folderName ($folderCreateTime)" $foldersToDelete += $folder } } @@ -273,7 +273,13 @@ function Empty-Folder { } if ($PSCmdlet.ShouldProcess("Emptying $foldersToEmptyCount folders ($WellKnownRootList $FolderNameList)", "$foldersToEmptyCount folders ($WellKnownRootList $FolderNameList)", "Empty folders")) { - Write-Host "`nEmptying $foldersToEmptyCount folders ($WellKnownRootList $FolderNameList)" + Write-Host "`nEmptying $foldersToEmptyCount folders..." + foreach ($folder in $FolderNameList) { + Write-Host "• $folder" + } + foreach ($folder in $WellKnownRootList) { + Write-Host "• $folder" + } # DeleteType = HardDelete, MoveToDeletedItems, or SoftDelete $body = @" @@ -308,6 +314,9 @@ function Delete-Folder { if ($PSCmdlet.ShouldProcess("Removing $foldersToRemoveCount folders ($FolderNameList)", "$foldersToRemoveCount folders ($FolderNameList)", "Delete folders")) { Write-Host "`nRemoving $foldersToRemoveCount folders ($FolderNameList)" + foreach ($folder in $FolderNameList) { + Write-Host "• $folder" + } # DeleteType = HardDelete, MoveToDeletedItems, or SoftDelete $body = @" @@ -353,7 +362,10 @@ function Purge-Folders { } if ($FolderPrefixPurgeList.count -gt 0 -and $PurgeBeforeTimestamp -ne $null) { - Write-Host "Folders older than $PurgeBeforeTimestamp with prefix: $FolderPrefixPurgeList" + Write-Host "Folders older than $PurgeBeforeTimestamp with prefix:" + foreach ($folder in $FolderPrefixPurgeList) { + Write-Host "• $folder" + } } $foldersToDeleteParams = @{ @@ -492,7 +504,7 @@ function Purge-Contacts { Write-Host "`nCleaning up contacts older than $PurgeBeforeTimestamp" Write-Host "-------------------------------------------------------" - # Create one seed contact which will have recent create date and will not be sweapt + # Create one seed contact which will have recent create date and will not be swept # This is needed since tests rely on some contact data being present Write-Host "`nCreating seed contact" Create-Contact From c696e7b7ff7a19fcf2d0b776a4861c40be820e9e Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Tue, 4 Apr 2023 09:25:44 +0530 Subject: [PATCH 17/37] Enable permissions backup by default (#2981) Previously we had a flag that needed to be flipped to backup permissions. Now we always backup permissions. - Should we wait till https://github.com/alcionai/corso/issues/2976 is done to do this - Users will have to do a non incremental backup first as of now to get permissions. We should probably have some way to force this. --- #### Does this PR need a docs update or release note? - [x] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [ ] :no_entry: No #### Type of change - [x] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * closes https://github.com/alcionai/corso/issues/2409 #### Test Plan - [ ] :muscle: Manual - [x] :zap: Unit test - [x] :green_heart: E2E --- CHANGELOG.md | 3 + src/cli/backup/onedrive.go | 2 +- src/cli/backup/onedrive_e2e_test.go | 4 +- src/cli/options/options.go | 21 +-- .../graph_connector_onedrive_test.go | 145 +----------------- .../connector/graph_connector_test.go | 14 +- src/internal/connector/onedrive/collection.go | 10 +- .../connector/onedrive/collection_test.go | 14 +- .../connector/onedrive/collections_test.go | 4 +- src/internal/connector/onedrive/drive_test.go | 2 +- src/internal/connector/onedrive/item.go | 9 +- src/internal/operations/backup.go | 14 +- .../operations/backup_integration_test.go | 2 +- src/pkg/control/options.go | 5 - 14 files changed, 39 insertions(+), 210 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac5b3dc6..8608857df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] (beta) +### Added +- Permissions backup for OneDrive is now out of experimental (By default, only newly backed up items will have their permissions backed up. You will have to run a full backup to ensure all items have their permissions backed up.) + ### Fixed - Fixed permissions restore in latest backup version. - Incremental OneDrive backups could panic if the delta token expired and a folder was seen and deleted in the course of item enumeration for the backup. diff --git a/src/cli/backup/onedrive.go b/src/cli/backup/onedrive.go index 9429e4ea5..96a9bff0a 100644 --- a/src/cli/backup/onedrive.go +++ b/src/cli/backup/onedrive.go @@ -68,7 +68,7 @@ func addOneDriveCommands(cmd *cobra.Command) *cobra.Command { c, fs = utils.AddCommand(cmd, oneDriveCreateCmd()) fs.SortFlags = false - options.AddFeatureToggle(cmd, options.EnablePermissionsBackup()) + options.AddFeatureToggle(cmd) c.Use = c.Use + " " + oneDriveServiceCommandCreateUseSuffix c.Example = oneDriveServiceCommandCreateExamples diff --git a/src/cli/backup/onedrive_e2e_test.go b/src/cli/backup/onedrive_e2e_test.go index 515002f31..fe0aed7eb 100644 --- a/src/cli/backup/onedrive_e2e_test.go +++ b/src/cli/backup/onedrive_e2e_test.go @@ -80,7 +80,7 @@ func (suite *NoBackupOneDriveE2ESuite) SetupSuite() { suite.acct, suite.st, control.Options{ - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }) require.NoError(t, err, clues.ToCore(err)) } @@ -201,7 +201,7 @@ func (suite *BackupDeleteOneDriveE2ESuite) SetupSuite() { suite.acct, suite.st, control.Options{ - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }) require.NoError(t, err, clues.ToCore(err)) diff --git a/src/cli/options/options.go b/src/cli/options/options.go index 30cbdbf8a..56a43dc49 100644 --- a/src/cli/options/options.go +++ b/src/cli/options/options.go @@ -19,7 +19,6 @@ func Control() control.Options { opt.RestorePermissions = restorePermissions opt.SkipReduce = skipReduce opt.ToggleFeatures.DisableIncrementals = disableIncrementals - opt.ToggleFeatures.EnablePermissionsBackup = enablePermissionsBackup opt.ItemFetchParallelism = fetchParallelism return opt @@ -55,8 +54,6 @@ func AddGlobalOperationFlags(cmd *cobra.Command) { func AddRestorePermissionsFlag(cmd *cobra.Command) { fs := cmd.Flags() fs.BoolVar(&restorePermissions, "restore-permissions", false, "Restore permissions for files and folders") - // TODO: reveal this flag once backing up permissions becomes default - cobra.CheckErr(fs.MarkHidden("restore-permissions")) } // AddSkipReduceFlag adds a hidden flag that allows callers to skip the selector @@ -81,10 +78,7 @@ func AddFetchParallelismFlag(cmd *cobra.Command) { // Feature Flags // --------------------------------------------------------------------------- -var ( - disableIncrementals bool - enablePermissionsBackup bool -) +var disableIncrementals bool type exposeFeatureFlag func(*pflag.FlagSet) @@ -109,16 +103,3 @@ func DisableIncrementals() func(*pflag.FlagSet) { cobra.CheckErr(fs.MarkHidden("disable-incrementals")) } } - -// Adds the hidden '--enable-permissions-backup' cli flag which, when -// set, enables backing up permissions. -func EnablePermissionsBackup() func(*pflag.FlagSet) { - return func(fs *pflag.FlagSet) { - fs.BoolVar( - &enablePermissionsBackup, - "enable-permissions-backup", - false, - "Enable backing up item permissions for OneDrive") - cobra.CheckErr(fs.MarkHidden("enable-permissions-backup")) - } -} diff --git a/src/internal/connector/graph_connector_onedrive_test.go b/src/internal/connector/graph_connector_onedrive_test.go index 385055860..02b6f454e 100644 --- a/src/internal/connector/graph_connector_onedrive_test.go +++ b/src/internal/connector/graph_connector_onedrive_test.go @@ -526,143 +526,6 @@ func (suite *GraphConnectorOneDriveIntegrationSuite) TestPermissionsInheritanceR testPermissionsInheritanceRestoreAndBackup(suite, version.Backup) } -// TestPermissionsRestoreAndNoBackup checks that even if permissions exist -// not setting EnablePermissionsBackup results in empty permissions. This test -// only needs to run on the current version.Backup because it's about backup -// behavior not restore behavior (restore behavior is checked in other tests). -func (suite *GraphConnectorOneDriveIntegrationSuite) TestPermissionsRestoreAndNoBackup() { - ctx, flush := tester.NewContext() - defer flush() - - t := suite.T() - - secondaryUserName, secondaryUserID := suite.SecondaryUser() - - driveID := mustGetDefaultDriveID( - t, - ctx, - suite.BackupService(), - suite.Service(), - suite.BackupResourceOwner(), - ) - - secondaryUserRead := permData{ - user: secondaryUserName, - entityID: secondaryUserID, - roles: readPerm, - } - - secondaryUserWrite := permData{ - user: secondaryUserName, - entityID: secondaryUserID, - roles: writePerm, - } - - test := restoreBackupInfoMultiVersion{ - service: suite.BackupService(), - resource: suite.Resource(), - backupVersion: version.Backup, - collectionsPrevious: []colInfo{ - newOneDriveCollection( - suite.T(), - suite.BackupService(), - []string{ - "drives", - driveID, - "root:", - }, - version.Backup, - ). - withFile( - fileName, - fileAData, - secondaryUserWrite, - ). - withFolder( - folderBName, - secondaryUserRead, - ). - collection(), - newOneDriveCollection( - suite.T(), - suite.BackupService(), - []string{ - "drives", - driveID, - "root:", - folderBName, - }, - version.Backup, - ). - withFile( - fileName, - fileEData, - secondaryUserRead, - ). - withPermissions( - secondaryUserRead, - ). - collection(), - }, - collectionsLatest: []colInfo{ - newOneDriveCollection( - suite.T(), - suite.BackupService(), - []string{ - "drives", - driveID, - "root:", - }, - version.Backup, - ). - withFile( - fileName, - fileAData, - permData{}, - ). - withFolder( - folderBName, - permData{}, - ). - collection(), - newOneDriveCollection( - suite.T(), - suite.BackupService(), - []string{ - "drives", - driveID, - "root:", - folderBName, - }, - version.Backup, - ). - withFile( - fileName, - fileEData, - permData{}, - ). - // Call this to generate a meta file with the folder name that we can - // check. - withPermissions( - permData{}, - ). - collection(), - }, - } - - runRestoreBackupTestVersions( - t, - suite.Account(), - test, - suite.Tenant(), - []string{suite.BackupResourceOwner()}, - control.Options{ - RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: false}, - }, - ) -} - // --------------------------------------------------------------------------- // OneDrive regression // --------------------------------------------------------------------------- @@ -862,7 +725,7 @@ func testRestoreAndBackupMultipleFilesAndFoldersNoPermissions( []string{suite.BackupResourceOwner()}, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, ) }) @@ -1073,7 +936,7 @@ func testPermissionsRestoreAndBackup(suite oneDriveSuite, startVersion int) { []string{suite.BackupResourceOwner()}, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, ) }) @@ -1156,7 +1019,7 @@ func testPermissionsBackupAndNoRestore(suite oneDriveSuite, startVersion int) { []string{suite.BackupResourceOwner()}, control.Options{ RestorePermissions: false, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, ) }) @@ -1308,7 +1171,7 @@ func testPermissionsInheritanceRestoreAndBackup(suite oneDriveSuite, startVersio []string{suite.BackupResourceOwner()}, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, ) }) diff --git a/src/internal/connector/graph_connector_test.go b/src/internal/connector/graph_connector_test.go index 5c45b3fa9..5b93a2118 100644 --- a/src/internal/connector/graph_connector_test.go +++ b/src/internal/connector/graph_connector_test.go @@ -249,7 +249,7 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreFailsBadService() { dest, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, nil, fault.New(true)) @@ -328,7 +328,7 @@ func (suite *GraphConnectorIntegrationSuite) TestEmptyCollections() { dest, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, test.col, fault.New(true)) @@ -851,7 +851,7 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreAndBackup() { []string{suite.user}, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, ) }) @@ -973,7 +973,7 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames dest, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, collections, fault.New(true)) @@ -1004,7 +1004,7 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames nil, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, fault.New(true)) require.NoError(t, err, clues.ToCore(err)) @@ -1064,7 +1064,7 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreAndBackup_largeMailAttac []string{suite.user}, control.Options{ RestorePermissions: true, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }, ) } @@ -1157,7 +1157,7 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections nil, control.Options{ RestorePermissions: false, - ToggleFeatures: control.Toggles{EnablePermissionsBackup: false}, + ToggleFeatures: control.Toggles{}, }, fault.New(true)) require.NoError(t, err) diff --git a/src/internal/connector/onedrive/collection.go b/src/internal/connector/onedrive/collection.go index ba8b715fa..997c7c94b 100644 --- a/src/internal/connector/onedrive/collection.go +++ b/src/internal/connector/onedrive/collection.go @@ -132,7 +132,6 @@ type itemMetaReaderFunc func( service graph.Servicer, driveID string, item models.DriveItemable, - fetchPermissions bool, ) (io.ReadCloser, int, error) // NewCollection creates a Collection @@ -481,8 +480,7 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) { ctx, oc.service, oc.driveID, - item, - oc.ctrl.ToggleFeatures.EnablePermissionsBackup) + item) if err != nil { el.AddRecoverable(clues.Wrap(err, "getting item metadata").Label(fault.LabelForceNoBackupCreation)) @@ -544,8 +542,10 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) { }) oc.data <- &MetadataItem{ - id: metaFileName + metaSuffix, - data: metaReader, + id: metaFileName + metaSuffix, + data: metaReader, + // Metadata file should always use the latest time as + // permissions change does not update mod time. modTime: time.Now(), } diff --git a/src/internal/connector/onedrive/collection_test.go b/src/internal/connector/onedrive/collection_test.go index e870f94e3..3afa31984 100644 --- a/src/internal/connector/onedrive/collection_test.go +++ b/src/internal/connector/onedrive/collection_test.go @@ -213,7 +213,7 @@ func (suite *CollectionUnitTestSuite) TestCollection() { suite, suite.testStatusUpdater(&wg, &collStatus), test.source, - control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + control.Options{ToggleFeatures: control.Toggles{}}, CollectionScopeFolder, true) require.NotNil(t, coll) @@ -237,7 +237,6 @@ func (suite *CollectionUnitTestSuite) TestCollection() { _ graph.Servicer, _ string, _ models.DriveItemable, - _ bool, ) (io.ReadCloser, int, error) { metaJSON, err := json.Marshal(testItemMeta) if err != nil { @@ -353,7 +352,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadError() { suite, suite.testStatusUpdater(&wg, &collStatus), test.source, - control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + control.Options{ToggleFeatures: control.Toggles{}}, CollectionScopeFolder, true) @@ -378,7 +377,6 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadError() { _ graph.Servicer, _ string, _ models.DriveItemable, - _ bool, ) (io.ReadCloser, int, error) { return io.NopCloser(strings.NewReader(`{}`)), 2, nil } @@ -443,7 +441,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadUnauthorizedErrorRetry() suite, suite.testStatusUpdater(&wg, &collStatus), test.source, - control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + control.Options{ToggleFeatures: control.Toggles{}}, CollectionScopeFolder, true) @@ -484,7 +482,6 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadUnauthorizedErrorRetry() _ graph.Servicer, _ string, _ models.DriveItemable, - _ bool, ) (io.ReadCloser, int, error) { return io.NopCloser(strings.NewReader(`{}`)), 2, nil } @@ -504,7 +501,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionReadUnauthorizedErrorRetry() } } -// TODO(meain): Remove this test once we start always backing up permissions +// Ensure metadata file always uses latest time for mod time func (suite *CollectionUnitTestSuite) TestCollectionPermissionBackupLatestModTime() { table := []struct { name string @@ -543,7 +540,7 @@ func (suite *CollectionUnitTestSuite) TestCollectionPermissionBackupLatestModTim suite, suite.testStatusUpdater(&wg, &collStatus), test.source, - control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + control.Options{ToggleFeatures: control.Toggles{}}, CollectionScopeFolder, true) @@ -571,7 +568,6 @@ func (suite *CollectionUnitTestSuite) TestCollectionPermissionBackupLatestModTim _ graph.Servicer, _ string, _ models.DriveItemable, - _ bool, ) (io.ReadCloser, int, error) { return io.NopCloser(strings.NewReader(`{}`)), 16, nil } diff --git a/src/internal/connector/onedrive/collections_test.go b/src/internal/connector/onedrive/collections_test.go index ffe42f777..2f823ce60 100644 --- a/src/internal/connector/onedrive/collections_test.go +++ b/src/internal/connector/onedrive/collections_test.go @@ -786,7 +786,7 @@ func (suite *OneDriveCollectionsUnitSuite) TestUpdateCollections() { testFolderMatcher{tt.scope}, &MockGraphService{}, nil, - control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}) + control.Options{ToggleFeatures: control.Toggles{}}) c.CollectionMap[driveID] = map[string]*Collection{} @@ -2237,7 +2237,7 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() { testFolderMatcher{anyFolder}, &MockGraphService{}, func(*support.ConnectorOperationStatus) {}, - control.Options{ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}}, + control.Options{ToggleFeatures: control.Toggles{}}, ) c.drivePagerFunc = drivePagerFunc c.itemPagerFunc = itemPagerFunc diff --git a/src/internal/connector/onedrive/drive_test.go b/src/internal/connector/onedrive/drive_test.go index 1bbc28779..930569a94 100644 --- a/src/internal/connector/onedrive/drive_test.go +++ b/src/internal/connector/onedrive/drive_test.go @@ -430,7 +430,7 @@ func (suite *OneDriveSuite) TestOneDriveNewCollections() { service, service.updateStatus, control.Options{ - ToggleFeatures: control.Toggles{EnablePermissionsBackup: true}, + ToggleFeatures: control.Toggles{}, }) odcs, excludes, err := colls.Get(ctx, nil, fault.New(true)) diff --git a/src/internal/connector/onedrive/item.go b/src/internal/connector/onedrive/item.go index f508ce506..8eddfb6d6 100644 --- a/src/internal/connector/onedrive/item.go +++ b/src/internal/connector/onedrive/item.go @@ -66,9 +66,8 @@ func oneDriveItemMetaReader( service graph.Servicer, driveID string, item models.DriveItemable, - fetchPermissions bool, ) (io.ReadCloser, int, error) { - return baseItemMetaReader(ctx, service, driveID, item, fetchPermissions) + return baseItemMetaReader(ctx, service, driveID, item) } func sharePointItemMetaReader( @@ -76,10 +75,9 @@ func sharePointItemMetaReader( service graph.Servicer, driveID string, item models.DriveItemable, - fetchPermissions bool, ) (io.ReadCloser, int, error) { // TODO: include permissions - return baseItemMetaReader(ctx, service, driveID, item, false) + return baseItemMetaReader(ctx, service, driveID, item) } func baseItemMetaReader( @@ -87,7 +85,6 @@ func baseItemMetaReader( service graph.Servicer, driveID string, item models.DriveItemable, - fetchPermissions bool, ) (io.ReadCloser, int, error) { var ( perms []UserPermission @@ -101,7 +98,7 @@ func baseItemMetaReader( meta.SharingMode = SharingModeCustom } - if meta.SharingMode == SharingModeCustom && fetchPermissions { + if meta.SharingMode == SharingModeCustom { perms, err = driveItemPermissionInfo(ctx, service, driveID, ptr.Val(item.GetId())) if err != nil { return nil, 0, err diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 9d5af2860..340d77fbd 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -302,18 +302,12 @@ func (op *BackupOperation) do( func useIncrementalBackup(sel selectors.Selector, opts control.Options) bool { enabled := !opts.ToggleFeatures.DisableIncrementals - switch sel.Service { - case selectors.ServiceExchange: + if sel.Service == selectors.ServiceExchange || + sel.Service == selectors.ServiceOneDrive { return enabled - - case selectors.ServiceOneDrive: - // TODO(ashmrtn): Remove the && part once we support permissions and - // incrementals. - return enabled && !opts.ToggleFeatures.EnablePermissionsBackup - - default: - return false } + + return false } // --------------------------------------------------------------------------- diff --git a/src/internal/operations/backup_integration_test.go b/src/internal/operations/backup_integration_test.go index c87a3ec71..3ec53b3c1 100644 --- a/src/internal/operations/backup_integration_test.go +++ b/src/internal/operations/backup_integration_test.go @@ -1155,7 +1155,7 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_oneDrive() { sel.Include(sel.AllData()) - bo, _, _, _, _, closer := prepNewTestBackupOp(t, ctx, mb, sel.Selector, control.Toggles{EnablePermissionsBackup: true}) + bo, _, _, _, _, closer := prepNewTestBackupOp(t, ctx, mb, sel.Selector, control.Toggles{}) defer closer() runAndCheckBackup(t, ctx, &bo, mb, false) diff --git a/src/pkg/control/options.go b/src/pkg/control/options.go index 0bc119f52..5f194f5ca 100644 --- a/src/pkg/control/options.go +++ b/src/pkg/control/options.go @@ -88,9 +88,4 @@ type Toggles struct { // DisableIncrementals prevents backups from using incremental lookups, // forcing a new, complete backup of all data regardless of prior state. DisableIncrementals bool `json:"exchangeIncrementals,omitempty"` - - // EnablePermissionsBackup is used to enable backups of item - // permissions. Permission metadata increases graph api call count, - // so disabling their retrieval when not needed is advised. - EnablePermissionsBackup bool `json:"enablePermissionsBackup,omitempty"` } From ce755ecf3cc6882ceb0956431c8f4ab88afb4972 Mon Sep 17 00:00:00 2001 From: Georgi Matev Date: Tue, 4 Apr 2023 04:53:28 -0700 Subject: [PATCH 18/37] Cleanup birthday events for old contacts (#3019) Purge events birthdays corresponding to old contacts --- #### 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 - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [x] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/cmd/purge/scripts/exchangePurge.ps1 | 134 ++++++++++++++++++------ 1 file changed, 101 insertions(+), 33 deletions(-) diff --git a/src/cmd/purge/scripts/exchangePurge.ps1 b/src/cmd/purge/scripts/exchangePurge.ps1 index 90c905911..7ba036522 100644 --- a/src/cmd/purge/scripts/exchangePurge.ps1 +++ b/src/cmd/purge/scripts/exchangePurge.ps1 @@ -129,7 +129,7 @@ function Get-TimestampFromName { try { # Assumes that the timestamp is at the end and starts with yyyy-mm-ddT and is ISO8601 - if ($name -imatch "(\d{4}}-\d{2}-\d{2}T.*)") { + if ($name -imatch "(\d{4}-\d{2}-\d{2}T[\S]*)") { $timestamp = [System.Convert]::ToDatetime($Matches.0) } @@ -226,21 +226,31 @@ function Get-FoldersToPurge { | Select-Object -ExpandProperty Value | Get-Date - $IsNameMatchParams = @{ - 'FolderName' = $folderName; - 'FolderNamePurgeList' = $FolderNamePurgeList - } + if ($FolderNamePurgeList.count -gt 0) { + $IsNameMatchParams = @{ + 'FolderName' = $folderName; + 'FolderNamePurgeList' = $FolderNamePurgeList + } - $IsPrefixAndAgeMatchParams = @{ - 'FolderName' = $folderName; - 'FolderCreateTime' = $folderCreateTime; - 'FolderPrefixPurgeList' = $FolderPrefixPurgeList; - 'PurgeBeforeTimestamp' = $PurgeBeforeTimestamp; + if ((IsNameMatch @IsNameMatchParams)) { + Write-Host "• Found name match: $folderName ($folderCreateTime)" + $foldersToDelete += $folder + continue + } } - if ((IsNameMatch @IsNameMatchParams) -or (IsPrefixAndAgeMatch @IsPrefixAndAgeMatchParams)) { - Write-Host "• Found: $folderName ($folderCreateTime)" - $foldersToDelete += $folder + if ($FolderPrefixPurgeList.count -gt 0) { + $IsPrefixAndAgeMatchParams = @{ + 'FolderName' = $folderName; + 'FolderCreateTime' = $folderCreateTime; + 'FolderPrefixPurgeList' = $FolderPrefixPurgeList; + 'PurgeBeforeTimestamp' = $PurgeBeforeTimestamp; + } + + if ((IsPrefixAndAgeMatch @IsPrefixAndAgeMatchParams)) { + Write-Host "• Found prefix match: $folderName ($folderCreateTime)" + $foldersToDelete += $folder + } } } @@ -399,6 +409,8 @@ function Purge-Folders { } function Create-Contact { + [CmdletBinding(SupportsShouldProcess)] + $now = (Get-Date (Get-Date).ToUniversalTime() -Format "o") #used to create a recent seed contact that will be shielded from cleanup. CI tests rely on this $body = @" @@ -419,14 +431,16 @@ function Create-Contact { 2000-01-01T11:59:00Z Tester - Plate "@ - $createContactMsg = Initialize-SOAPMessage -User $User -Body $body - $response = Invoke-SOAPRequest -Token $Token -Message $createContactMsg + if ($PSCmdlet.ShouldProcess("Creating seed contact...", "", "Create contact")) { + Write-Host "`nCreating seed contact..." + $createContactMsg = Initialize-SOAPMessage -User $User -Body $body + $response = Invoke-SOAPRequest -Token $Token -Message $createContactMsg + } } function Get-ItemsToPurge { @@ -434,11 +448,33 @@ function Get-ItemsToPurge { [Parameter(Mandatory = $True, HelpMessage = "Folder under which to look for items matching removal criteria")] [String]$WellKnownRoot, + [Parameter(Mandatory = $False, HelpMessage = "Immediate subfolder within well known folder")] + [String]$SubFolderName = $null, + [Parameter(Mandatory = $True, HelpMessage = "Purge items before this date time (UTC)")] [datetime]$PurgeBeforeTimestamp ) $itemsToDelete = @() + $foldersToSearchBody = "" + + if (![String]::IsNullOrEmpty($SubFolderName)) { + $subFolders, $moreToList = Get-FoldersToPurge -WellKnownRoot $WellKnownRoot -FolderNamePurgeList $SubFolderName -PurgeBeforeTimestamp $PurgeBeforeTimestamp + + if ($subFolders.count -gt 0 ) { + $foldersToSearchBody = "" + foreach ($sub in $subFolders) { + $subName = $sub.DisplayName + $subId = $sub.FolderId.Id + Write-Host "Found subfolder from which to purge items: $subName" + $foldersToSearchBody = "`n" + } + } + else { + Write-Host "Requested subfolder $SubFolderName in folder $WellKnownRoot was not found" + return + } + } # SOAP message for getting the folder id $body = @" @@ -450,12 +486,12 @@ function Get-ItemsToPurge { - + $FoldersToSearchBody "@ - Write-Host "`nLooking for items under well-known folder: $WellKnownRoot older than $PurgeBeforeTimestamp for user: $User" + Write-Host "`nLooking for items under well-known folder: $WellKnownRoot($SubFolderName) older than $PurgeBeforeTimestamp for user: $User" $getItemsMsg = Initialize-SOAPMessage -User $User -Body $body $response = Invoke-SOAPRequest -Token $Token -Message $getItemsMsg @@ -468,15 +504,24 @@ function Get-ItemsToPurge { Select-Object -ExpandProperty Node $moreToList = ![System.Convert]::ToBoolean($rootFolder.IncludesLastItemInRange) + Write-Host "Total items under $WellKnownRoot/$SubFolderName"$rootFolder.TotalItemsInView + foreach ($item in $items) { $itemId = $item.ItemId.Id $changeKey = $item.ItemId.Changekey - $itemName = $item.DisplayName + $itemName = "" $itemCreateTime = $item.ExtendedProperty | Where-Object { $_.ExtendedFieldURI.PropertyTag -eq "0x3007" } | Select-Object -ExpandProperty Value | Get-Date + # can be improved to pass the field to use as a name as a parameter but this is good for now + switch -casesensitive ($WellKnownRoot) { + "calendar" { $itemName = $item.Subject } + "contacts" { $itemName = $item.DisplayName } + Default { $itemName = $item.DisplayName } + } + if ([String]::IsNullOrEmpty($itemId) -or [String]::IsNullOrEmpty($changeKey)) { continue } @@ -491,33 +536,51 @@ function Get-ItemsToPurge { $itemsToDelete += $item } + if ($WhatIfPreference) { + # not actually deleting items so only do a single iteration + $moreToList = $false + } + return $itemsToDelete, $moreToList } -function Purge-Contacts { +function Purge-Items { [CmdletBinding(SupportsShouldProcess)] Param( [Parameter(Mandatory = $True, HelpMessage = "Purge items before this date time (UTC)")] - [datetime]$PurgeBeforeTimestamp + [datetime]$PurgeBeforeTimestamp, + + [Parameter(Mandatory = $True, HelpMessage = "Items folder")] + [string]$ItemsFolder, + + [Parameter(Mandatory = $False, HelpMessage = "Items sub-folder")] + [string]$ItemsSubFolder = $null + ) - Write-Host "`nCleaning up contacts older than $PurgeBeforeTimestamp" - Write-Host "-------------------------------------------------------" + $additionalAttributes = "SendMeetingCancellations='SendToNone'" - # Create one seed contact which will have recent create date and will not be swept - # This is needed since tests rely on some contact data being present - Write-Host "`nCreating seed contact" - Create-Contact + Write-Host "`nCleaning up items from folder $ItemsFolder($ItemsSubFolder) older than $PurgeBeforeTimestamp" + Write-Host "-----------------------------------------------------------------------------" + + if ($ItemsFolder -eq "contacts") { + $ItemsSubFolder = $null + $additionalAttributes = "" + + # Create one seed contact which will have recent create date and will not be sweapt + # This is needed since tests rely on some contact data being present + Create-Contact + } $moreToList = $True # only get max of 1000 results so we may need to iterate over eligible contacts while ($moreToList) { - $itemsToDelete, $moreToList = Get-ItemsToPurge -WellKnownRoot "contacts" -PurgeBeforeTimestamp $PurgeBeforeTimestamp + $itemsToDelete, $moreToList = Get-ItemsToPurge -WellKnownRoot $ItemsFolder -SubFolderName $ItemsSubFolder -PurgeBeforeTimestamp $PurgeBeforeTimestamp $itemsToDeleteCount = $itemsToDelete.count $itemsToDeleteBody = "" if ($itemsToDeleteCount -eq 0) { - Write-Host "`nNo more contacts to delete matching criteria" + Write-Host "`nNo more items to delete matching criteria" break } @@ -531,21 +594,23 @@ function Purge-Contacts { # Do the actual deletion in a batch request # DeleteType = HardDelete, MoveToDeletedItems, or SoftDelete $body = @" - + $itemsToDeleteBody "@ - + if ($PSCmdlet.ShouldProcess("Deleting $itemsToDeleteCount items...", "$itemsToDeleteCount items", "Delete items")) { Write-Host "`nDeleting $itemsToDeleteCount items..." $emptyFolderMsg = Initialize-SOAPMessage -User $User -Body $body $response = Invoke-SOAPRequest -Token $Token -Message $emptyFolderMsg + + Write-Verbose "Delete response:`n" + Write-Verbose $response.OuterXml Write-Host "`nDeleted $itemsToDeleteCount items..." - } } } @@ -564,7 +629,10 @@ $purgeFolderParams = @{ Purge-Folders @purgeFolderParams #purge older contacts -Purge-Contacts -PurgeBeforeTimestamp $PurgeBeforeTimestamp +Purge-Items -ItemsFolder "contacts" -PurgeBeforeTimestamp $PurgeBeforeTimestamp + +#purge older contact birthday events +Purge-Items -ItemsFolder "calendar" -ItemsSubFolder "Birthdays" -PurgeBeforeTimestamp $PurgeBeforeTimestamp # Empty Deleted Items and then purge all recoverable items. Deletes the following # -/Recoverable Items/Audits From 4e1a44fbee64f60149a9926fe4fbd37957b3c7e1 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Tue, 4 Apr 2023 21:35:25 +0530 Subject: [PATCH 19/37] Remove unnecessary indirection for retries (#3021) This was previously used to add retry logic which is no more the case as is a completely unnecessary indirection. --- #### 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: Supportability/Tests - [ ] :computer: CI/Deployment - [x] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- .../exchange/exchange_data_collection.go | 18 +----------------- .../exchange/exchange_data_collection_test.go | 2 +- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/internal/connector/exchange/exchange_data_collection.go b/src/internal/connector/exchange/exchange_data_collection.go index d8e1cc2e7..66d891b28 100644 --- a/src/internal/connector/exchange/exchange_data_collection.go +++ b/src/internal/connector/exchange/exchange_data_collection.go @@ -251,11 +251,10 @@ func (col *Collection) streamItems(ctx context.Context, errs *fault.Bus) { defer wg.Done() defer func() { <-semaphoreCh }() - item, info, err := getItemWithRetries( + item, info, err := col.items.GetItem( ctx, user, id, - col.items, fault.New(true)) // temporary way to force a failFast error if err != nil { // Don't report errors for deleted items as there's no way for us to @@ -300,21 +299,6 @@ func (col *Collection) streamItems(ctx context.Context, errs *fault.Bus) { wg.Wait() } -// get an item while handling retry and backoff. -func getItemWithRetries( - ctx context.Context, - userID, itemID string, - items itemer, - errs *fault.Bus, -) (serialization.Parsable, *details.ExchangeInfo, error) { - item, info, err := items.GetItem(ctx, userID, itemID, errs) - if err != nil { - return nil, nil, err - } - - return item, info, nil -} - // terminatePopulateSequence is a utility function used to close a Collection's data channel // and to send the status update through the channel. func (col *Collection) finishPopulation( diff --git a/src/internal/connector/exchange/exchange_data_collection_test.go b/src/internal/connector/exchange/exchange_data_collection_test.go index 4df0bbb87..2abb08bb6 100644 --- a/src/internal/connector/exchange/exchange_data_collection_test.go +++ b/src/internal/connector/exchange/exchange_data_collection_test.go @@ -228,7 +228,7 @@ func (suite *ExchangeDataCollectionSuite) TestGetItemWithRetries() { defer flush() // itemer is mocked, so only the errors are configured atm. - _, _, err := getItemWithRetries(ctx, "userID", "itemID", test.items, fault.New(true)) + _, _, err := test.items.GetItem(ctx, "userID", "itemID", fault.New(true)) test.expectErr(suite.T(), err) }) } From b26f4e1796cfd7c12dde4b2d293633f00e7c361b Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Tue, 4 Apr 2023 21:59:52 +0530 Subject: [PATCH 20/37] Remove `--enable-permissions-backup` flag from sanity tests (#3020) Permissions backup is now default, but this flag was never removed from sanity-tests CI. --- #### 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: Supportability/Tests - [ ] :computer: CI/Deployment - [x] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- .github/workflows/sanity-test.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/sanity-test.yaml b/.github/workflows/sanity-test.yaml index 57f988fe3..3ff954b81 100644 --- a/.github/workflows/sanity-test.yaml +++ b/.github/workflows/sanity-test.yaml @@ -237,7 +237,6 @@ jobs: ./corso backup create onedrive \ --hide-progress \ --user "${CORSO_M365_TEST_USER_ID}" \ - --enable-permissions-backup \ --json \ 2>&1 | tee $TEST_RESULT/backup_onedrive.txt @@ -308,7 +307,6 @@ jobs: ./corso backup create onedrive \ --hide-progress \ --user "${CORSO_M365_TEST_USER_ID}" \ - --enable-permissions-backup \ --json \ 2>&1 | tee $TEST_RESULT/backup_onedrive_incremental.txt From fbb867a08daa7f7f825210728e1287902aa882c9 Mon Sep 17 00:00:00 2001 From: Keepers Date: Tue, 4 Apr 2023 10:59:31 -0600 Subject: [PATCH 21/37] add clues.Hide to various logs (#2994) Begins hiding PII with clues.Hide injections in our structured logging aggregators. This is a Non- comprehensive change, and improvements here will be ongoing. --- #### Does this PR need a docs update or release note? - [x] :clock1: Yes, but in a later PR #### Type of change - [x] :robot: Supportability/Tests #### Issue(s) * #2024 #### Test Plan - [x] :muscle: Manual - [x] :green_heart: E2E --- src/internal/connector/exchange/attachment.go | 5 ++- .../connector/exchange/service_restore.go | 2 +- src/internal/connector/graph/service.go | 2 +- src/internal/connector/graph_connector.go | 7 ++-- src/internal/connector/onedrive/drive.go | 2 +- src/internal/connector/onedrive/restore.go | 4 +- src/internal/connector/sharepoint/restore.go | 4 +- src/internal/operations/backup.go | 6 +-- src/internal/operations/restore.go | 4 +- src/pkg/logger/example_logger_test.go | 39 ++++++++++++++++++- src/pkg/repository/repository.go | 4 +- src/pkg/services/m365/m365.go | 3 +- 12 files changed, 59 insertions(+), 23 deletions(-) diff --git a/src/internal/connector/exchange/attachment.go b/src/internal/connector/exchange/attachment.go index 019699e77..f42f3348d 100644 --- a/src/internal/connector/exchange/attachment.go +++ b/src/internal/connector/exchange/attachment.go @@ -52,7 +52,7 @@ func uploadAttachment( ctx, "attachment_size", ptr.Val(attachment.GetSize()), "attachment_id", ptr.Val(attachment.GetId()), - "attachment_name", ptr.Val(attachment.GetName()), // TODO: pii + "attachment_name", clues.Hide(ptr.Val(attachment.GetName())), "attachment_type", attachmentType, "internal_item_type", getItemAttachmentItemType(attachment), "uploader_item_id", uploader.getItemID()) @@ -104,7 +104,8 @@ func uploadLargeAttachment( url := ptr.Val(session.GetUploadUrl()) aw := uploadsession.NewWriter(uploader.getItemID(), url, size) - logger.Ctx(ctx).Debugw("uploading large attachment", "attachment_url", url) // TODO: url pii + // TODO: url pii refinementt + logger.Ctx(ctx).Debugw("uploading large attachment", "attachment_url", clues.Hide(url)) // Upload the stream data copyBuffer := make([]byte, attachmentChunkSize) diff --git a/src/internal/connector/exchange/service_restore.go b/src/internal/connector/exchange/service_restore.go index c72b1cbf0..10808e7ed 100644 --- a/src/internal/connector/exchange/service_restore.go +++ b/src/internal/connector/exchange/service_restore.go @@ -314,7 +314,7 @@ func RestoreExchangeDataCollections( if len(dcs) > 0 { userID = dcs[0].FullPath().ResourceOwner() - ctx = clues.Add(ctx, "resource_owner", userID) // TODO: pii + ctx = clues.Add(ctx, "resource_owner", clues.Hide(userID)) } for _, dc := range dcs { diff --git a/src/internal/connector/graph/service.go b/src/internal/connector/graph/service.go index 93251b730..bbe6de0aa 100644 --- a/src/internal/connector/graph/service.go +++ b/src/internal/connector/graph/service.go @@ -280,7 +280,7 @@ func (handler *LoggingMiddleware) Intercept( ctx = clues.Add( req.Context(), "method", req.Method, - "url", req.URL, // TODO: pii + "url", req.URL, // TODO: pii, not hasing yet because we want debuggable urls "request_len", req.ContentLength, ) resp, err = pipeline.Next(req, middlewareIndex) diff --git a/src/internal/connector/graph_connector.go b/src/internal/connector/graph_connector.go index 692a9b83d..f3237ffec 100644 --- a/src/internal/connector/graph_connector.go +++ b/src/internal/connector/graph_connector.go @@ -165,16 +165,15 @@ func identifySite(item any) (string, string, error) { if m.GetName() == nil { // the built-in site at "https://{tenant-domain}/search" never has a name. if ok && strings.HasSuffix(url, "/search") { - // TODO: pii siteID, on this and all following cases - return "", "", clues.Stack(errKnownSkippableCase).With("site_id", id) + return "", "", clues.Stack(errKnownSkippableCase).With("site_id", clues.Hide(id)) } - return "", "", clues.New("site has no name").With("site_id", id) + return "", "", clues.New("site has no name").With("site_id", clues.Hide(id)) } // personal (ie: oneDrive) sites have to be filtered out server-side. if ok && strings.Contains(url, personalSitePath) { - return "", "", clues.Stack(errKnownSkippableCase).With("site_id", id) + return "", "", clues.Stack(errKnownSkippableCase).With("site_id", clues.Hide(id)) } return url, id, nil diff --git a/src/internal/connector/onedrive/drive.go b/src/internal/connector/onedrive/drive.go index f443cb8c7..117e8f288 100644 --- a/src/internal/connector/onedrive/drive.go +++ b/src/internal/connector/onedrive/drive.go @@ -303,7 +303,7 @@ func GetAllFolders( name = ptr.Val(d.GetName()) ) - ictx := clues.Add(ctx, "drive_id", id, "drive_name", name) // TODO: pii + ictx := clues.Add(ctx, "drive_id", id, "drive_name", clues.Hide(name)) collector := func( _ context.Context, _, _ string, diff --git a/src/internal/connector/onedrive/restore.go b/src/internal/connector/onedrive/restore.go index 3505f6c2b..765bc38b9 100644 --- a/src/internal/connector/onedrive/restore.go +++ b/src/internal/connector/onedrive/restore.go @@ -75,9 +75,9 @@ func RestoreCollections( err error ictx = clues.Add( ctx, - "resource_owner", dc.FullPath().ResourceOwner(), // TODO: pii + "resource_owner", clues.Hide(dc.FullPath().ResourceOwner()), "category", dc.FullPath().Category(), - "path", dc.FullPath()) // TODO: pii + "path", dc.FullPath()) // TODO: pii, path needs concealer compliance ) metrics, folderMetas, err = RestoreCollection( diff --git a/src/internal/connector/sharepoint/restore.go b/src/internal/connector/sharepoint/restore.go index afa7a2dd8..1f77b7b7a 100644 --- a/src/internal/connector/sharepoint/restore.go +++ b/src/internal/connector/sharepoint/restore.go @@ -61,8 +61,8 @@ func RestoreCollections( metrics support.CollectionMetrics ictx = clues.Add(ctx, "category", category, - "destination", dest.ContainerName, // TODO: pii - "resource_owner", dc.FullPath().ResourceOwner()) // TODO: pii + "destination", clues.Hide(dest.ContainerName), + "resource_owner", clues.Hide(dc.FullPath().ResourceOwner())) ) switch dc.FullPath().Category() { diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 340d77fbd..08de9678a 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -144,8 +144,8 @@ func (op *BackupOperation) Run(ctx context.Context) (err error) { ctx = clues.Add( ctx, - "tenant_id", op.account.ID(), // TODO: pii - "resource_owner", op.ResourceOwner, // TODO: pii + "tenant_id", clues.Hide(op.account.ID()), + "resource_owner", clues.Hide(op.ResourceOwner), "backup_id", op.Results.BackupID, "service", op.Selectors.Service, "incremental", op.incremental) @@ -549,7 +549,7 @@ func mergeDetails( if err != nil { return clues.New("parsing base item info path"). WithClues(mctx). - With("repo_ref", entry.RepoRef) // todo: pii + With("repo_ref", entry.RepoRef) // todo: pii, path needs concealer compliance } // Although this base has an entry it may not be the most recent. Check diff --git a/src/internal/operations/restore.go b/src/internal/operations/restore.go index 1220cfe66..f11b3e56b 100644 --- a/src/internal/operations/restore.go +++ b/src/internal/operations/restore.go @@ -134,10 +134,10 @@ func (op *RestoreOperation) Run(ctx context.Context) (restoreDetails *details.De ctx = clues.Add( ctx, - "tenant_id", op.account.ID(), // TODO: pii + "tenant_id", clues.Hide(op.account.ID()), "backup_id", op.BackupID, "service", op.Selectors.Service, - "destination_container", op.Destination.ContainerName) + "destination_container", clues.Hide(op.Destination.ContainerName)) // ----- // Execution diff --git a/src/pkg/logger/example_logger_test.go b/src/pkg/logger/example_logger_test.go index 6241f4b99..13b1ee417 100644 --- a/src/pkg/logger/example_logger_test.go +++ b/src/pkg/logger/example_logger_test.go @@ -5,7 +5,9 @@ import ( "github.com/alcionai/clues" + "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/pkg/logger" + "github.com/alcionai/corso/src/pkg/path" ) // --------------------------------------------------------------------------- @@ -18,7 +20,10 @@ const ( itemID = "item_id" ) -var err error +var ( + err error + itemPath, _ = path.Build("tid", "own", path.ExchangeService, path.ContactsCategory, false, "foo") +) // --------------------------------------------------------------------------- // examples @@ -129,6 +134,36 @@ func Example_logger_clues_standards() { // in the expected format. logger.CtxErr(ctx, err).Error("getting item") - // TODO(keepers): PII // 3. Protect pii in logs. + // When it comes to protecting sensitive information, we only want + // to hand loggers (and, by extension, clues errors) using one of + // three approaches to securing values. + // + // First: plain, unhidden data. This can only be logged if we are + // absolutely assured that this data does not expose sensitive + // information for a user. Eg: internal ids and enums are fine to + // log in plain text. Everything else must be considered wisely. + // + // Second: manually concealed values. Strings containing sensitive + // info, and structs from external pacakges containing sensitive info, + // can be logged by manually wrapping them with a clues.Hide() call. + // Ex: clues.Hide(userName). This will hash the value according to + // the user's hash algorithm configuration. + // + // Third: structs that comply with clues.Concealer. The Concealer + // interface requires a struct to comply with Conceal() (for cases + // where the struct is handed to a clues aggregator directly), and + // fmt's Format(state, verb), where the assumption is the standard + // format writer will be replaced with a Conceal() call (for cases + // where the struct is handed to some non-compliant formatter/printer). + // + // preferred + log.With( + // internal type, safe to log plainly + "resource_type", connector.Users, + // string containing sensitive info, wrap with Hide() + "user_name", clues.Hide("your_user_name@microsoft.example"), + // a concealer-compliant struct, safe to add plainly + "storage_path", itemPath, + ) } diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 1e340f9dc..1a9423677 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -105,7 +105,7 @@ func Initialize( ctx = clues.Add( ctx, "acct_provider", acct.Provider.String(), - "acct_id", acct.ID(), // TODO: pii + "acct_id", clues.Hide(acct.ID()), "storage_provider", s.Provider.String()) defer func() { @@ -179,7 +179,7 @@ func Connect( ctx = clues.Add( ctx, "acct_provider", acct.Provider.String(), - "acct_id", acct.ID(), // TODO: pii + "acct_id", clues.Hide(acct.ID()), "storage_provider", s.Provider.String()) defer func() { diff --git a/src/pkg/services/m365/m365.go b/src/pkg/services/m365/m365.go index e078152cf..4f620ce67 100644 --- a/src/pkg/services/m365/m365.go +++ b/src/pkg/services/m365/m365.go @@ -6,6 +6,7 @@ import ( "github.com/alcionai/clues" "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/discovery" "github.com/alcionai/corso/src/internal/connector/graph" @@ -137,7 +138,7 @@ func SiteIDs(ctx context.Context, acct account.Account, errs *fault.Bus) ([]stri func parseUser(item models.Userable) (*User, error) { if item.GetUserPrincipalName() == nil { return nil, clues.New("user missing principal name"). - With("user_id", *item.GetId()) // TODO: pii + With("user_id", clues.Hide(ptr.Val(item.GetId()))) } u := &User{PrincipalName: *item.GetUserPrincipalName(), ID: *item.GetId()} From 2341d61842dd97f9e7bdcd1c07b103f6aa8da894 Mon Sep 17 00:00:00 2001 From: Keepers Date: Tue, 4 Apr 2023 14:21:58 -0600 Subject: [PATCH 22/37] introduce id-name lookup maps (#2955) Adds two maps to resource-owner handling: id-to-name and name-to-id. Expectation is that these maps will either get populated by a caller as a pre-process before initializing the gc client, or gc will (later pr) be able to look up the owner and populate those maps itself. The maps are used to set the selector id and name for iface compliance. Only supported by exchange in this PR. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Issue(s) * #2825 #### Test Plan - [x] :zap: Unit test - [x] :green_heart: E2E --- src/cli/backup/backup.go | 16 ++- src/cli/backup/exchange.go | 6 +- src/cli/backup/exchange_e2e_test.go | 15 ++- src/cli/backup/onedrive.go | 6 +- src/cli/backup/onedrive_e2e_test.go | 15 ++- src/cli/backup/sharepoint.go | 3 +- src/cli/backup/sharepoint_e2e_test.go | 15 ++- src/cli/restore/exchange_e2e_test.go | 14 +- src/cmd/factory/impl/common.go | 4 +- src/internal/common/idname.go | 38 ++++++ src/internal/connector/graph_connector.go | 67 +++++++++- .../connector/graph_connector_test.go | 125 +++++++++++++++++- src/pkg/backup/backup.go | 15 ++- src/pkg/backup/backup_test.go | 6 +- .../loadtest/repository_load_test.go | 20 +-- src/pkg/repository/repository.go | 12 +- src/pkg/repository/repository_test.go | 2 +- src/pkg/services/m365/m365.go | 39 +++--- 18 files changed, 350 insertions(+), 68 deletions(-) diff --git a/src/cli/backup/backup.go b/src/cli/backup/backup.go index 09af8b966..9e1d4bda2 100644 --- a/src/cli/backup/backup.go +++ b/src/cli/backup/backup.go @@ -13,6 +13,7 @@ import ( "github.com/alcionai/corso/src/cli/options" . "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/backup" @@ -194,6 +195,7 @@ func runBackups( r repository.Repository, serviceName, resourceOwnerType string, selectorSet []selectors.Selector, + ins common.IDNameSwapper, ) error { var ( bIDs []string @@ -203,21 +205,21 @@ func runBackups( for _, discSel := range selectorSet { var ( owner = discSel.DiscreteOwner - bctx = clues.Add(ctx, "resource_owner", owner) + ictx = clues.Add(ctx, "resource_owner", owner) ) - bo, err := r.NewBackup(bctx, discSel) + bo, err := r.NewBackup(ictx, discSel, ins) if err != nil { - errs = append(errs, clues.Wrap(err, owner).WithClues(bctx)) - Errf(bctx, "%v\n", err) + errs = append(errs, clues.Wrap(err, owner).WithClues(ictx)) + Errf(ictx, "%v\n", err) continue } - err = bo.Run(bctx) + err = bo.Run(ictx) if err != nil { - errs = append(errs, clues.Wrap(err, owner).WithClues(bctx)) - Errf(bctx, "%v\n", err) + errs = append(errs, clues.Wrap(err, owner).WithClues(ictx)) + Errf(ictx, "%v\n", err) continue } diff --git a/src/cli/backup/exchange.go b/src/cli/backup/exchange.go index 07acce3cd..bf6fb410d 100644 --- a/src/cli/backup/exchange.go +++ b/src/cli/backup/exchange.go @@ -164,14 +164,14 @@ func createExchangeCmd(cmd *cobra.Command, args []string) error { // TODO: log/print recoverable errors errs := fault.New(false) - users, err := m365.UserPNs(ctx, *acct, errs) + ins, err := m365.UsersMap(ctx, *acct, errs) if err != nil { return Only(ctx, clues.Wrap(err, "Failed to retrieve M365 user(s)")) } selectorSet := []selectors.Selector{} - for _, discSel := range sel.SplitByResourceOwner(users) { + for _, discSel := range sel.SplitByResourceOwner(ins.IDs()) { selectorSet = append(selectorSet, discSel.Selector) } @@ -180,7 +180,7 @@ func createExchangeCmd(cmd *cobra.Command, args []string) error { r, "Exchange", "user", selectorSet, - ) + ins) } func exchangeBackupCreateSelectors(userIDs, cats []string) *selectors.ExchangeBackup { diff --git a/src/cli/backup/exchange_e2e_test.go b/src/cli/backup/exchange_e2e_test.go index cce596f10..a03f65e05 100644 --- a/src/cli/backup/exchange_e2e_test.go +++ b/src/cli/backup/exchange_e2e_test.go @@ -16,6 +16,7 @@ import ( "github.com/alcionai/corso/src/cli/config" "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/connector/exchange" "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" @@ -300,7 +301,15 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { suite.backupOps = make(map[path.CategoryType]string) - users := []string{suite.m365UserID} + var ( + users = []string{suite.m365UserID} + idToName = map[string]string{suite.m365UserID: "todo-name-" + suite.m365UserID} + nameToID = map[string]string{"todo-name-" + suite.m365UserID: suite.m365UserID} + ins = common.IDsNames{ + IDToName: idToName, + NameToID: nameToID, + } + ) for _, set := range backupDataSets { var ( @@ -321,7 +330,7 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { sel.Include(scopes) - bop, err := suite.repo.NewBackup(ctx, sel.Selector) + bop, err := suite.repo.NewBackup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = bop.Run(ctx) @@ -546,7 +555,7 @@ func (suite *BackupDeleteExchangeE2ESuite) SetupSuite() { sel := selectors.NewExchangeBackup(users) sel.Include(sel.MailFolders([]string{exchange.DefaultMailFolder}, selectors.PrefixMatch())) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector) + suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector, nil) require.NoError(t, err, clues.ToCore(err)) err = suite.backupOp.Run(ctx) diff --git a/src/cli/backup/onedrive.go b/src/cli/backup/onedrive.go index 96a9bff0a..31cffae7e 100644 --- a/src/cli/backup/onedrive.go +++ b/src/cli/backup/onedrive.go @@ -148,14 +148,14 @@ func createOneDriveCmd(cmd *cobra.Command, args []string) error { // TODO: log/print recoverable errors errs := fault.New(false) - users, err := m365.UserPNs(ctx, *acct, errs) + ins, err := m365.UsersMap(ctx, *acct, errs) if err != nil { return Only(ctx, clues.Wrap(err, "Failed to retrieve M365 users")) } selectorSet := []selectors.Selector{} - for _, discSel := range sel.SplitByResourceOwner(users) { + for _, discSel := range sel.SplitByResourceOwner(ins.IDs()) { selectorSet = append(selectorSet, discSel.Selector) } @@ -164,7 +164,7 @@ func createOneDriveCmd(cmd *cobra.Command, args []string) error { r, "OneDrive", "user", selectorSet, - ) + ins) } func validateOneDriveBackupCreateFlags(users []string) error { diff --git a/src/cli/backup/onedrive_e2e_test.go b/src/cli/backup/onedrive_e2e_test.go index fe0aed7eb..f73532ff4 100644 --- a/src/cli/backup/onedrive_e2e_test.go +++ b/src/cli/backup/onedrive_e2e_test.go @@ -16,6 +16,7 @@ import ( "github.com/alcionai/corso/src/cli/config" "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/account" @@ -205,14 +206,22 @@ func (suite *BackupDeleteOneDriveE2ESuite) SetupSuite() { }) require.NoError(t, err, clues.ToCore(err)) - m365UserID := tester.M365UserID(t) - users := []string{m365UserID} + var ( + m365UserID = tester.M365UserID(t) + users = []string{m365UserID} + idToName = map[string]string{m365UserID: "todo-name-" + m365UserID} + nameToID = map[string]string{"todo-name-" + m365UserID: m365UserID} + ins = common.IDsNames{ + IDToName: idToName, + NameToID: nameToID, + } + ) // some tests require an existing backup sel := selectors.NewOneDriveBackup(users) sel.Include(sel.Folders(selectors.Any())) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector) + suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = suite.backupOp.Run(ctx) diff --git a/src/cli/backup/sharepoint.go b/src/cli/backup/sharepoint.go index 76fd80f66..32062cb11 100644 --- a/src/cli/backup/sharepoint.go +++ b/src/cli/backup/sharepoint.go @@ -154,6 +154,7 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { // TODO: log/print recoverable errors errs := fault.New(false) + // TODO: discovery of sharepoint sites instead of early GC construction. gc, err := connector.NewGraphConnector(ctx, graph.HTTPClient(graph.NoTimeout()), *acct, connector.Sites, errs) if err != nil { return Only(ctx, clues.Wrap(err, "Failed to connect to Microsoft APIs")) @@ -175,7 +176,7 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { r, "SharePoint", "site", selectorSet, - ) + nil) // TODO: prepopulate ids,names } func validateSharePointBackupCreateFlags(sites, weburls, cats []string) error { diff --git a/src/cli/backup/sharepoint_e2e_test.go b/src/cli/backup/sharepoint_e2e_test.go index dd5556e9e..f8b577024 100644 --- a/src/cli/backup/sharepoint_e2e_test.go +++ b/src/cli/backup/sharepoint_e2e_test.go @@ -16,6 +16,7 @@ import ( "github.com/alcionai/corso/src/cli/config" "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/account" @@ -157,14 +158,22 @@ func (suite *BackupDeleteSharePointE2ESuite) SetupSuite() { suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) require.NoError(t, err, clues.ToCore(err)) - m365SiteID := tester.M365SiteID(t) - sites := []string{m365SiteID} + var ( + m365SiteID = tester.M365SiteID(t) + sites = []string{m365SiteID} + idToName = map[string]string{m365SiteID: "todo-name-" + m365SiteID} + nameToID = map[string]string{"todo-name-" + m365SiteID: m365SiteID} + ins = common.IDsNames{ + IDToName: idToName, + NameToID: nameToID, + } + ) // some tests require an existing backup sel := selectors.NewSharePointBackup(sites) sel.Include(testdata.SharePointBackupFolderScope(sel)) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector) + suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = suite.backupOp.Run(ctx) diff --git a/src/cli/restore/exchange_e2e_test.go b/src/cli/restore/exchange_e2e_test.go index 497f5ae70..03a783e62 100644 --- a/src/cli/restore/exchange_e2e_test.go +++ b/src/cli/restore/exchange_e2e_test.go @@ -12,6 +12,7 @@ import ( "github.com/alcionai/corso/src/cli" "github.com/alcionai/corso/src/cli/config" "github.com/alcionai/corso/src/cli/utils" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/connector/exchange" "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" @@ -73,7 +74,16 @@ func (suite *RestoreExchangeE2ESuite) SetupSuite() { suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) suite.m365UserID = tester.M365UserID(t) - users := []string{suite.m365UserID} + + var ( + users = []string{suite.m365UserID} + idToName = map[string]string{suite.m365UserID: "todo-name-" + suite.m365UserID} + nameToID = map[string]string{"todo-name-" + suite.m365UserID: suite.m365UserID} + ins = common.IDsNames{ + IDToName: idToName, + NameToID: nameToID, + } + ) // init the repo first suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) @@ -100,7 +110,7 @@ func (suite *RestoreExchangeE2ESuite) SetupSuite() { sel.Include(scopes) - bop, err := suite.repo.NewBackup(ctx, sel.Selector) + bop, err := suite.repo.NewBackup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = bop.Run(ctx) diff --git a/src/cmd/factory/impl/common.go b/src/cmd/factory/impl/common.go index 4a8ee1b52..e2dd3c1f7 100644 --- a/src/cmd/factory/impl/common.go +++ b/src/cmd/factory/impl/common.go @@ -126,12 +126,12 @@ func getGCAndVerifyUser(ctx context.Context, userID string) (*connector.GraphCon errs := fault.New(false) normUsers := map[string]struct{}{} - users, err := m365.UserPNs(ctx, acct, errs) + ins, err := m365.UsersMap(ctx, acct, errs) if err != nil { return nil, account.Account{}, clues.Wrap(err, "getting tenant users") } - for _, k := range users { + for _, k := range ins.IDs() { normUsers[strings.ToLower(k)] = struct{}{} } diff --git a/src/internal/common/idname.go b/src/internal/common/idname.go index fdc767226..efee8493f 100644 --- a/src/internal/common/idname.go +++ b/src/internal/common/idname.go @@ -1,5 +1,7 @@ package common +import "golang.org/x/exp/maps" + type IDNamer interface { // the canonical id of the thing, generated and usable // by whichever system has ownership of it. @@ -7,3 +9,39 @@ type IDNamer interface { // the human-readable name of the thing. Name() string } + +type IDNameSwapper interface { + IDOf(name string) (string, bool) + NameOf(id string) (string, bool) + IDs() []string + Names() []string +} + +var _ IDNameSwapper = &IDsNames{} + +type IDsNames struct { + IDToName map[string]string + NameToID map[string]string +} + +// IDOf returns the id associated with the given name. +func (in IDsNames) IDOf(name string) (string, bool) { + id, ok := in.NameToID[name] + return id, ok +} + +// NameOf returns the name associated with the given id. +func (in IDsNames) NameOf(id string) (string, bool) { + name, ok := in.IDToName[id] + return name, ok +} + +// IDs returns all known ids. +func (in IDsNames) IDs() []string { + return maps.Keys(in.IDToName) +} + +// Names returns all known names. +func (in IDsNames) Names() []string { + return maps.Keys(in.NameToID) +} diff --git a/src/internal/connector/graph_connector.go b/src/internal/connector/graph_connector.go index f3237ffec..36c8f34f6 100644 --- a/src/internal/connector/graph_connector.go +++ b/src/internal/connector/graph_connector.go @@ -17,6 +17,7 @@ import ( "github.com/pkg/errors" "golang.org/x/exp/maps" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/discovery/api" "github.com/alcionai/corso/src/internal/connector/graph" @@ -49,9 +50,16 @@ type GraphConnector struct { itemClient *http.Client // configured to handle large item downloads tenant string - Sites map[string]string // webURL -> siteID and siteID -> webURL credentials account.M365Config + // TODO: remove in favor of the maps below. + Sites map[string]string // webURL -> siteID and siteID -> webURL + + // lookup for resource owner ids to names, and names to ids. + // not guaranteed to be populated, only here as a post-population + // reference for processes that choose to populate the values. + IDNameLookup common.IDNameSwapper + // wg is used to track completion of GC tasks wg *sync.WaitGroup region *trace.Region @@ -108,6 +116,63 @@ func NewGraphConnector( return &gc, nil } +// PopulateOwnerIDAndNamesFrom takes the provided owner identifier and produces +// the owner's name and ID from that value. Returns an error if the owner is +// not recognized by the current tenant. +// +// The id-name swapper is optional. Some processes will look up all owners in +// the tenant before reaching this step. In that case, the data gets handed +// down for this func to consume instead of performing further queries. The +// maps get stored inside the gc instance for later re-use. +// +// TODO: If the maps are nil or empty, this func will perform a lookup on the given +// owner, and populate each map with that owner's id and name for downstream +// guarantees about that data being present. Optional performance enhancement +// idea: downstream from here, we should _only_ need the given user's id and name, +// and could store minimal map copies with that info instead of the whole tenant. +func (gc *GraphConnector) PopulateOwnerIDAndNamesFrom( + owner string, // input value, can be either id or name + ins common.IDNameSwapper, +) (string, string, error) { + // move this to GC method + id, name, err := getOwnerIDAndNameFrom(owner, ins) + if err != nil { + return "", "", errors.Wrap(err, "resolving resource owner details") + } + + gc.IDNameLookup = ins + + if ins == nil || (len(ins.IDs()) == 0 && len(ins.Names()) == 0) { + gc.IDNameLookup = common.IDsNames{ + IDToName: map[string]string{id: name}, + NameToID: map[string]string{name: id}, + } + } + + return id, name, nil +} + +func getOwnerIDAndNameFrom( + owner string, + ins common.IDNameSwapper, +) (string, string, error) { + if ins == nil { + return owner, owner, nil + } + + if n, ok := ins.NameOf(owner); ok { + return owner, n, nil + } else if i, ok := ins.IDOf(owner); ok { + return i, owner, nil + } + + // TODO: look-up user by owner, either id or name, + // and populate with maps as a result. Only + // return owner, owner as a very last resort. + + return owner, owner, nil +} + // createService constructor for graphService component func (gc *GraphConnector) createService() (*graph.Service, error) { adapter, err := graph.CreateAdapter( diff --git a/src/internal/connector/graph_connector_test.go b/src/internal/connector/graph_connector_test.go index 5b93a2118..c704fc209 100644 --- a/src/internal/connector/graph_connector_test.go +++ b/src/internal/connector/graph_connector_test.go @@ -13,6 +13,7 @@ import ( "github.com/stretchr/testify/suite" "golang.org/x/exp/maps" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/mockconnector" "github.com/alcionai/corso/src/internal/connector/support" @@ -123,11 +124,11 @@ func (suite *GraphConnectorUnitSuite) TestUnionSiteIDsAndWebURLs() { } for _, test := range table { suite.Run(test.name, func() { - t := suite.T() - ctx, flush := tester.NewContext() defer flush() + t := suite.T() + result, err := gc.UnionSiteIDsAndWebURLs(ctx, test.ids, test.urls, fault.New(true)) assert.NoError(t, err, clues.ToCore(err)) assert.ElementsMatch(t, test.expect, result) @@ -135,6 +136,126 @@ func (suite *GraphConnectorUnitSuite) TestUnionSiteIDsAndWebURLs() { } } +func (suite *GraphConnectorUnitSuite) TestPopulateOwnerIDAndNamesFrom() { + const ( + ownerID = "owner-id" + ownerName = "owner-name" + ) + + var ( + itn = map[string]string{ownerID: ownerName} + nti = map[string]string{ownerName: ownerID} + ) + + table := []struct { + name string + owner string + ins common.IDsNames + expectID string + expectName string + }{ + { + name: "nil ins", + owner: ownerID, + expectID: ownerID, + expectName: ownerID, + }, + { + name: "only id map with owner id", + owner: ownerID, + ins: common.IDsNames{ + IDToName: itn, + NameToID: nil, + }, + expectID: ownerID, + expectName: ownerName, + }, + { + name: "only name map with owner id", + owner: ownerID, + ins: common.IDsNames{ + IDToName: nil, + NameToID: nti, + }, + expectID: ownerID, + expectName: ownerID, + }, + { + name: "only id map with owner name", + owner: ownerName, + ins: common.IDsNames{ + IDToName: itn, + NameToID: nil, + }, + expectID: ownerName, + expectName: ownerName, + }, + { + name: "only name map with owner name", + owner: ownerName, + ins: common.IDsNames{ + IDToName: nil, + NameToID: nti, + }, + expectID: ownerID, + expectName: ownerName, + }, + { + name: "both maps with owner id", + owner: ownerID, + ins: common.IDsNames{ + IDToName: itn, + NameToID: nti, + }, + expectID: ownerID, + expectName: ownerName, + }, + { + name: "both maps with owner name", + owner: ownerName, + ins: common.IDsNames{ + IDToName: itn, + NameToID: nti, + }, + expectID: ownerID, + expectName: ownerName, + }, + { + name: "non-matching maps with owner id", + owner: ownerID, + ins: common.IDsNames{ + IDToName: map[string]string{"foo": "bar"}, + NameToID: map[string]string{"fnords": "smarf"}, + }, + expectID: ownerID, + expectName: ownerID, + }, + { + name: "non-matching with owner name", + owner: ownerName, + ins: common.IDsNames{ + IDToName: map[string]string{"foo": "bar"}, + NameToID: map[string]string{"fnords": "smarf"}, + }, + expectID: ownerName, + expectName: ownerName, + }, + } + for _, test := range table { + suite.Run(test.name, func() { + var ( + t = suite.T() + gc = &GraphConnector{} + ) + + id, name, err := gc.PopulateOwnerIDAndNamesFrom(test.owner, test.ins) + require.NoError(t, err, clues.ToCore(err)) + assert.Equal(t, test.expectID, id) + assert.Equal(t, test.expectName, name) + }) + } +} + func (suite *GraphConnectorUnitSuite) TestGraphConnector_Wait() { ctx, flush := tester.NewContext() defer flush() diff --git a/src/pkg/backup/backup.go b/src/pkg/backup/backup.go index c8beef662..d9b52c9d3 100644 --- a/src/pkg/backup/backup.go +++ b/src/pkg/backup/backup.go @@ -110,6 +110,9 @@ func New( }, }, + ResourceOwnerID: ownerID, + ResourceOwnerName: ownerName, + Version: version.Backup, SnapshotID: snapshotID, StreamStoreID: streamStoreID, @@ -242,10 +245,20 @@ func (b Backup) Values() []string { status += (")") } + name := b.ResourceOwnerName + + if len(name) == 0 { + name = b.ResourceOwnerID + } + + if len(name) == 0 { + name = b.Selector.DiscreteOwner + } + return []string{ common.FormatTabularDisplayTime(b.StartedAt), string(b.ID), status, - b.Selector.DiscreteOwner, + name, } } diff --git a/src/pkg/backup/backup_test.go b/src/pkg/backup/backup_test.go index 59beeb313..91bde1a17 100644 --- a/src/pkg/backup/backup_test.go +++ b/src/pkg/backup/backup_test.go @@ -24,7 +24,7 @@ func TestBackupUnitSuite(t *testing.T) { suite.Run(t, &BackupUnitSuite{Suite: tester.NewUnitSuite(t)}) } -func stubBackup(t time.Time) backup.Backup { +func stubBackup(t time.Time, ownerID, ownerName string) backup.Backup { sel := selectors.NewExchangeBackup([]string{"test"}) sel.Include(sel.AllData()) @@ -63,7 +63,7 @@ func (suite *BackupUnitSuite) TestBackup_HeadersValues() { var ( t = suite.T() now = time.Now() - b = stubBackup(now) + b = stubBackup(now, "id", "name") expectHs = []string{ "Started At", "ID", @@ -190,7 +190,7 @@ func (suite *BackupUnitSuite) TestBackup_Values_statusVariations() { func (suite *BackupUnitSuite) TestBackup_MinimumPrintable() { t := suite.T() now := time.Now() - b := stubBackup(now) + b := stubBackup(now, "id", "name") resultIface := b.MinimumPrintable() result, ok := resultIface.(backup.Printable) diff --git a/src/pkg/repository/loadtest/repository_load_test.go b/src/pkg/repository/loadtest/repository_load_test.go index 19d67fca8..5d7a597a2 100644 --- a/src/pkg/repository/loadtest/repository_load_test.go +++ b/src/pkg/repository/loadtest/repository_load_test.go @@ -120,7 +120,7 @@ func runLoadTest( ) { //revive:enable:context-as-argument t.Run(prefix+"_load_test_main", func(t *testing.T) { - b, err := r.NewBackup(ctx, bupSel) + b, err := r.NewBackup(ctx, bupSel, nil) require.NoError(t, err, clues.ToCore(err)) runBackupLoadTest(t, ctx, &b, service, usersUnderTest) @@ -447,8 +447,7 @@ func (suite *LoadExchangeSuite) TestExchange() { "all_users", "exchange", suite.usersUnderTest, sel, sel, // same selection for backup and restore - true, - ) + true) } // single user, lots of data @@ -500,8 +499,7 @@ func (suite *IndividualLoadExchangeSuite) TestExchange() { "single_user", "exchange", suite.usersUnderTest, sel, sel, // same selection for backup and restore - true, - ) + true) } // ------------------------------------------------------------------------------------------------ @@ -553,8 +551,7 @@ func (suite *LoadOneDriveSuite) TestOneDrive() { "all_users", "one_drive", suite.usersUnderTest, sel, sel, // same selection for backup and restore - false, - ) + false) } type IndividualLoadOneDriveSuite struct { @@ -601,8 +598,7 @@ func (suite *IndividualLoadOneDriveSuite) TestOneDrive() { "single_user", "one_drive", suite.usersUnderTest, sel, sel, // same selection for backup and restore - false, - ) + false) } // ------------------------------------------------------------------------------------------------ @@ -654,8 +650,7 @@ func (suite *LoadSharePointSuite) TestSharePoint() { "all_sites", "share_point", suite.sitesUnderTest, sel, sel, // same selection for backup and restore - false, - ) + false) } type IndividualLoadSharePointSuite struct { @@ -703,6 +698,5 @@ func (suite *IndividualLoadSharePointSuite) TestSharePoint() { "single_site", "share_point", suite.sitesUnderTest, sel, sel, // same selection for backup and restore - false, - ) + false) } diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 1a9423677..63bde62a8 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -8,6 +8,7 @@ import ( "github.com/google/uuid" "github.com/pkg/errors" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/crash" "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/graph" @@ -58,6 +59,7 @@ type Repository interface { NewBackup( ctx context.Context, self selectors.Selector, + ins common.IDNameSwapper, ) (operations.BackupOperation, error) NewRestore( ctx context.Context, @@ -287,17 +289,25 @@ func (r *repository) Close(ctx context.Context) error { } // NewBackup generates a BackupOperation runner. +// ownerIDToName and ownerNameToID are optional populations, in case the caller has +// already generated those values. func (r repository) NewBackup( ctx context.Context, sel selectors.Selector, + ins common.IDNameSwapper, ) (operations.BackupOperation, error) { gc, err := connectToM365(ctx, sel, r.Account, fault.New(true)) if err != nil { return operations.BackupOperation{}, errors.Wrap(err, "connecting to m365") } + ownerID, ownerName, err := gc.PopulateOwnerIDAndNamesFrom(sel.DiscreteOwner, ins) + if err != nil { + return operations.BackupOperation{}, errors.Wrap(err, "resolving resource owner details") + } + // TODO: retrieve display name from gc - sel = sel.SetDiscreteOwnerIDName(sel.DiscreteOwner, "") + sel = sel.SetDiscreteOwnerIDName(ownerID, ownerName) return operations.NewBackupOperation( ctx, diff --git a/src/pkg/repository/repository_test.go b/src/pkg/repository/repository_test.go index cdea26d27..14871731d 100644 --- a/src/pkg/repository/repository_test.go +++ b/src/pkg/repository/repository_test.go @@ -198,7 +198,7 @@ func (suite *RepositoryIntegrationSuite) TestNewBackup() { r, err := repository.Initialize(ctx, acct, st, control.Options{}) require.NoError(t, err, clues.ToCore(err)) - bo, err := r.NewBackup(ctx, selectors.Selector{DiscreteOwner: "test"}) + bo, err := r.NewBackup(ctx, selectors.Selector{DiscreteOwner: "test"}, nil) require.NoError(t, err, clues.ToCore(err)) require.NotNil(t, bo) } diff --git a/src/pkg/services/m365/m365.go b/src/pkg/services/m365/m365.go index 4f620ce67..3815cdd46 100644 --- a/src/pkg/services/m365/m365.go +++ b/src/pkg/services/m365/m365.go @@ -6,6 +6,7 @@ import ( "github.com/alcionai/clues" "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/discovery" @@ -56,34 +57,34 @@ func Users(ctx context.Context, acct account.Account, errs *fault.Bus) ([]*User, return ret, nil } -func UserIDs(ctx context.Context, acct account.Account, errs *fault.Bus) ([]string, error) { +// UsersMap retrieves all users in the tenant, and returns two maps: one id-to-principalName, +// and one principalName-to-id. +func UsersMap( + ctx context.Context, + acct account.Account, + errs *fault.Bus, +) (common.IDsNames, error) { users, err := Users(ctx, acct, errs) if err != nil { - return nil, err + return common.IDsNames{}, err } - ret := make([]string, 0, len(users)) + var ( + idToName = make(map[string]string, len(users)) + nameToID = make(map[string]string, len(users)) + ) + for _, u := range users { - ret = append(ret, u.ID) + idToName[u.ID] = u.PrincipalName + nameToID[u.PrincipalName] = u.ID } - return ret, nil -} - -// UserPNs retrieves all user principleNames in the tenant. Principle Names -// can be used analogous userIDs in graph API queries. -func UserPNs(ctx context.Context, acct account.Account, errs *fault.Bus) ([]string, error) { - users, err := Users(ctx, acct, errs) - if err != nil { - return nil, err + ins := common.IDsNames{ + IDToName: idToName, + NameToID: nameToID, } - ret := make([]string, 0, len(users)) - for _, u := range users { - ret = append(ret, u.PrincipalName) - } - - return ret, nil + return ins, nil } type Site struct { From 74e4a094e05ed9aed5bc642f9f69975b624c99f9 Mon Sep 17 00:00:00 2001 From: Keepers Date: Tue, 4 Apr 2023 15:01:37 -0600 Subject: [PATCH 23/37] conceal url pii (#3015) Adds a new package to common (pii) with a clues. Concealer compliant struct that can log and report url values with a mix of hidden pii and exposed public values. Exposed values are based on well-known graph api path and query params. --- #### Does this PR need a docs update or release note? - [x] :clock1: Yes, but in a later PR #### Type of change - [x] :robot: Supportability/Tests #### Issue(s) * #2024 #### Test Plan - [x] :zap: Unit test --- src/internal/common/pii/pii.go | 18 +++ src/internal/common/pii/url.go | 96 ++++++++++++++ src/internal/common/pii/url_test.go | 123 ++++++++++++++++++ src/internal/connector/exchange/attachment.go | 4 +- src/internal/connector/graph/service.go | 85 ++++++++++-- .../connector/uploadsession/uploadsession.go | 11 +- 6 files changed, 322 insertions(+), 15 deletions(-) create mode 100644 src/internal/common/pii/pii.go create mode 100644 src/internal/common/pii/url.go create mode 100644 src/internal/common/pii/url_test.go diff --git a/src/internal/common/pii/pii.go b/src/internal/common/pii/pii.go new file mode 100644 index 000000000..102d782d1 --- /dev/null +++ b/src/internal/common/pii/pii.go @@ -0,0 +1,18 @@ +package pii + +import "strings" + +// MapWithPlurls places the toLower value of each string +// into a map[string]struct{}, along with a copy of the that +// string as a plural (ex: FoO => foo, foos). +func MapWithPlurals(ss ...string) map[string]struct{} { + mss := make(map[string]struct{}, len(ss)*2) + + for _, s := range ss { + tl := strings.ToLower(s) + mss[tl] = struct{}{} + mss[tl+"s"] = struct{}{} + } + + return mss +} diff --git a/src/internal/common/pii/url.go b/src/internal/common/pii/url.go new file mode 100644 index 000000000..34707a360 --- /dev/null +++ b/src/internal/common/pii/url.go @@ -0,0 +1,96 @@ +package pii + +import ( + "fmt" + "net/url" + "strings" + + "github.com/alcionai/clues" + "golang.org/x/exp/maps" + "golang.org/x/exp/slices" +) + +// SafeURL complies with the clues.Concealer and fmt.Stringer +// interfaces to produce a safely loggable version of the URL. +// Path elements that equal a SafePathWords entry will show in +// plain text. All other path elements will get hashed by clues. +// Query parameters that match a key in SafeQueryParams will have +// their values displayed in plain text. All other query parames +// will get hashed by clues. +type SafeURL struct { + // the original URL + URL string + // path elements that do not need to be hidden + // keys should be lower-cased + SafePathElems map[string]struct{} + // query parameters that do not need to be hidden + // keys should be lower-cased + SafeQueryKeys map[string]struct{} +} + +var _ clues.Concealer = &SafeURL{} + +// Conceal produces a string of the url with the sensitive info +// obscured (hashed or replaced). +func (u SafeURL) Conceal() string { + if len(u.URL) == 0 { + return "" + } + + p, err := url.Parse(u.URL) + if err != nil { + return "malformed-URL" + } + + elems := slices.Clone(strings.Split(p.EscapedPath(), "/")) + + // conceal any non-safe path elem + for i := range elems { + e := elems[i] + + if _, ok := u.SafePathElems[strings.ToLower(e)]; !ok { + elems[i] = clues.Conceal(e) + } + } + + qry := maps.Clone(p.Query()) + + // conceal any non-safe query param values + for k, v := range p.Query() { + if _, ok := u.SafeQueryKeys[strings.ToLower(k)]; ok { + continue + } + + for i := range v { + v[i] = clues.Conceal(v[i]) + } + + qry[k] = v + } + + je := strings.Join(elems, "/") + esc := p.Scheme + "://" + p.Hostname() + je + + if len(qry) > 0 { + esc += "?" + qry.Encode() + } + + unesc, err := url.QueryUnescape(esc) + if err != nil { + return esc + } + + return unesc +} + +// Format ensures the safeURL will output the Conceal() version +// even when used in a PrintF. +func (u SafeURL) Format(fs fmt.State, _ rune) { + fmt.Fprint(fs, u.Conceal()) +} + +// String complies with Stringer to ensure the Conceal() version +// of the url is printed anytime it gets transformed to a string. +func (u SafeURL) String() string { + return u.Conceal() +} diff --git a/src/internal/common/pii/url_test.go b/src/internal/common/pii/url_test.go new file mode 100644 index 000000000..a89fd2d26 --- /dev/null +++ b/src/internal/common/pii/url_test.go @@ -0,0 +1,123 @@ +package pii_test + +import ( + "fmt" + "testing" + + "github.com/alcionai/clues" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" + + "github.com/alcionai/corso/src/internal/common/pii" + "github.com/alcionai/corso/src/internal/tester" +) + +type URLUnitSuite struct { + tester.Suite +} + +func TestURLUnitSuite(t *testing.T) { + suite.Run(t, &URLUnitSuite{Suite: tester.NewUnitSuite(t)}) +} + +// set the clues hashing to mask for the span of this suite +func (suite *URLUnitSuite) SetupSuite() { + clues.SetHasher(clues.HashCfg{HashAlg: clues.Flatmask}) +} + +// revert clues hashing to plaintext for all other tests +func (suite *URLUnitSuite) TeardownSuite() { + clues.SetHasher(clues.NoHash()) +} + +func (suite *URLUnitSuite) TestDoesThings() { + stubURL := "https://host.com/foo/bar/baz/qux?fnords=smarfs&fnords=brunhilda&beaux=regard" + + table := []struct { + name string + input string + expect string + safePath map[string]struct{} + safeQuery map[string]struct{} + }{ + { + name: "no safety", + input: stubURL, + expect: "https://host.com/***/***/***/***?beaux=***&fnords=***&fnords=***", + }, + { + name: "safe paths", + input: stubURL, + expect: "https://host.com/foo/***/baz/***?beaux=***&fnords=***&fnords=***", + safePath: map[string]struct{}{"foo": {}, "baz": {}}, + }, + { + name: "safe query", + input: stubURL, + expect: "https://host.com/***/***/***/***?beaux=regard&fnords=***&fnords=***", + safeQuery: map[string]struct{}{"beaux": {}}, + }, + { + name: "safe path and query", + input: stubURL, + expect: "https://host.com/foo/***/baz/***?beaux=regard&fnords=***&fnords=***", + safePath: map[string]struct{}{"foo": {}, "baz": {}}, + safeQuery: map[string]struct{}{"beaux": {}}, + }, + { + name: "empty elements", + input: "https://host.com/foo//baz/?fnords=&beaux=", + expect: "https://host.com/foo//baz/?beaux=&fnords=", + safePath: map[string]struct{}{"foo": {}, "baz": {}}, + }, + { + name: "no path", + input: "https://host.com/", + expect: "https://host.com/", + }, + { + name: "no path with query", + input: "https://host.com/?fnords=smarfs&fnords=brunhilda&beaux=regard", + expect: "https://host.com/?beaux=***&fnords=***&fnords=***", + }, + { + name: "relative path", + input: "/foo/bar/baz/qux?fnords=smarfs&fnords=brunhilda&beaux=regard", + expect: ":///***/***/***/***?beaux=***&fnords=***&fnords=***", + }, + { + name: "malformed url", + input: "i am not a url", + expect: "://***", + }, + { + name: "empty url", + input: "", + expect: "", + }, + } + for _, test := range table { + suite.Run(test.name, func() { + var ( + t = suite.T() + su = pii.SafeURL{ + URL: test.input, + SafePathElems: test.safePath, + SafeQueryKeys: test.safeQuery, + } + ) + + result := su.Conceal() + assert.Equal(t, test.expect, result, "Conceal()") + + result = su.String() + assert.Equal(t, test.expect, result, "String()") + + result = fmt.Sprintf("%s", su) + assert.Equal(t, test.expect, result, "fmt %%s") + + result = fmt.Sprintf("%+v", su) + assert.Equal(t, test.expect, result, "fmt %%+v") + }) + } +} diff --git a/src/internal/connector/exchange/attachment.go b/src/internal/connector/exchange/attachment.go index f42f3348d..4c6c99d13 100644 --- a/src/internal/connector/exchange/attachment.go +++ b/src/internal/connector/exchange/attachment.go @@ -9,6 +9,7 @@ import ( "github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/connector/uploadsession" "github.com/alcionai/corso/src/pkg/logger" @@ -104,8 +105,7 @@ func uploadLargeAttachment( url := ptr.Val(session.GetUploadUrl()) aw := uploadsession.NewWriter(uploader.getItemID(), url, size) - // TODO: url pii refinementt - logger.Ctx(ctx).Debugw("uploading large attachment", "attachment_url", clues.Hide(url)) + logger.Ctx(ctx).Debugw("uploading large attachment", "attachment_url", graph.LoggableURL(url)) // Upload the stream data copyBuffer := make([]byte, attachmentChunkSize) diff --git a/src/internal/connector/graph/service.go b/src/internal/connector/graph/service.go index bbe6de0aa..4bf449044 100644 --- a/src/internal/connector/graph/service.go +++ b/src/internal/connector/graph/service.go @@ -19,6 +19,7 @@ import ( msgraphgocore "github.com/microsoftgraph/msgraph-sdk-go-core" "golang.org/x/time/rate" + "github.com/alcionai/corso/src/internal/common/pii" "github.com/alcionai/corso/src/internal/events" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/logger" @@ -271,20 +272,86 @@ type Servicer interface { // LoggingMiddleware can be used to log the http request sent by the graph client type LoggingMiddleware struct{} +// well-known path names used by graph api calls +// used to un-hide path elements in a pii.SafeURL +var safePathParams = pii.MapWithPlurals( + //nolint:misspell + "alltime", + "analytics", + "archive", + "beta", + "calendargroup", + "calendar", + "calendarview", + "channel", + "childfolder", + "children", + "clone", + "column", + "contactfolder", + "contact", + "contenttype", + "delta", + "drive", + "event", + "group", + "inbox", + "instance", + "invitation", + "item", + "joinedteam", + "label", + "list", + "mailfolder", + "member", + "message", + "notification", + "page", + "primarychannel", + "root", + "security", + "site", + "subscription", + "team", + "unarchive", + "user", + "v1.0") + +// well-known safe query parameters used by graph api calls +// +// used to un-hide query params in a pii.SafeURL +var safeQueryParams = map[string]struct{}{ + "deltatoken": {}, + "startdatetime": {}, + "enddatetime": {}, + "$count": {}, + "$expand": {}, + "$filter": {}, + "$select": {}, + "$top": {}, +} + +func LoggableURL(url string) pii.SafeURL { + return pii.SafeURL{ + URL: url, + SafePathElems: safePathParams, + SafeQueryKeys: safeQueryParams, + } +} + func (handler *LoggingMiddleware) Intercept( pipeline khttp.Pipeline, middlewareIndex int, req *http.Request, ) (*http.Response, error) { - var ( - ctx = clues.Add( - req.Context(), - "method", req.Method, - "url", req.URL, // TODO: pii, not hasing yet because we want debuggable urls - "request_len", req.ContentLength, - ) - resp, err = pipeline.Next(req, middlewareIndex) - ) + ctx := clues.Add( + req.Context(), + "method", req.Method, + "url", LoggableURL(req.URL.String()), + "request_len", req.ContentLength) + + // call the next middleware + resp, err := pipeline.Next(req, middlewareIndex) if strings.Contains(req.URL.String(), "users//") { logger.Ctx(ctx).Error("malformed request url: missing resource") diff --git a/src/internal/connector/uploadsession/uploadsession.go b/src/internal/connector/uploadsession/uploadsession.go index 60f84f6ef..210abe018 100644 --- a/src/internal/connector/uploadsession/uploadsession.go +++ b/src/internal/connector/uploadsession/uploadsession.go @@ -40,8 +40,9 @@ func NewWriter(id, url string, size int64) *writer { // https://docs.microsoft.com/en-us/graph/api/driveitem-createuploadsession func (iw *writer) Write(p []byte) (int, error) { rangeLength := len(p) - logger.Ctx(context.Background()).Debugf("WRITE for %s. Size:%d, Offset: %d, TotalSize: %d", - iw.id, rangeLength, iw.lastWrittenOffset, iw.contentLength) + logger.Ctx(context.Background()). + Debugf("WRITE for %s. Size:%d, Offset: %d, TotalSize: %d", + iw.id, rangeLength, iw.lastWrittenOffset, iw.contentLength) endOffset := iw.lastWrittenOffset + int64(rangeLength) @@ -49,13 +50,15 @@ func (iw *writer) Write(p []byte) (int, error) { // data in the current request _, err := iw.client.R(). SetHeaders(map[string]string{ - contentRangeHeaderKey: fmt.Sprintf(contentRangeHeaderValueFmt, + contentRangeHeaderKey: fmt.Sprintf( + contentRangeHeaderValueFmt, iw.lastWrittenOffset, endOffset-1, iw.contentLength), contentLengthHeaderKey: fmt.Sprintf("%d", rangeLength), }). - SetBody(bytes.NewReader(p)).Put(iw.url) + SetBody(bytes.NewReader(p)). + Put(iw.url) if err != nil { return 0, clues.Wrap(err, "uploading item").With( "upload_id", iw.id, From 9b0adf8bdfececa3d2d70820889859a0e1247517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C4=8Dnica=20Mellifera?= Date: Tue, 4 Apr 2023 14:33:55 -0700 Subject: [PATCH 24/37] New Blog on AWS storage tiers (#2957) --- #### 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 - [x] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- website/blog/2023-4-04-aws-storage-class.md | 133 ++++++++++++++++++++ website/blog/images/box_sizes.jpeg | Bin 0 -> 547865 bytes website/styles/Vocab/Base/accept.txt | 3 +- 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 website/blog/2023-4-04-aws-storage-class.md create mode 100644 website/blog/images/box_sizes.jpeg diff --git a/website/blog/2023-4-04-aws-storage-class.md b/website/blog/2023-4-04-aws-storage-class.md new file mode 100644 index 000000000..b94d5e6d5 --- /dev/null +++ b/website/blog/2023-4-04-aws-storage-class.md @@ -0,0 +1,133 @@ +--- +slug: aws-storage-class +title: "Choosing the Best AWS S3 Storage Class for Corso Backups" +description: "By watching my +four short videos, you’ll be set up and on your way to backing up all your Microsoft 365 +data in less than 20 minutes. That’s shorter than most meetings!" +authors: nica +tags: [corso, microsoft 365, AWS, backups] +date: 2023-04-04 +image: ./images/box_sizes.jpeg +--- + +![multiple box sizes](./images/box_sizes.jpeg) +Recently when writing +about the storage options for Corso, I found myself going pretty far in the +weeds on storage classes in S3. I thought I’d make a list of all the storage +options and why they might, or might not, work for backups. + + +## First, some assumptions + +If we’re talking about backups, we're assuming far more writes than read, and +that most objects that are written will never be read. + +Increasing age of an object increases the chances that it will never be read. + +And we can’t afford to lose anything! One-zone options that carry a small +chance of data loss like OneZone_IA won't work. + +Finally, there will be index data and metadata that may well be overwritten +frequently. For more detail on this, and an exploration of non-AWS alternatives +to S3, see our past article on +[where to store your Corso data](https://corsobackup.io/blog/where-to-store-corso/). + +If your backup solution breaks one of these expectations, for example if you’re +restoring from backups every single day, the advice in this article may not be +applicable to you. + +## Best practices no matter your storage class + +Using a tool for backups rather than a naive file copy process is the first step +towards an efficient backup process. Before you drag that folder over to that +network drive icon, consider the following requirements: + +- Compression - don’t use more network bandwidth than you have to +- De-duplication - backing up a team’s email shouldn’t mean storing 50 identical copies of ‘Presentation_FINAL.pptx’ +- Incremental Backups - Ideally, your second backup should only include updated objects +- Bundling - creating millions of 2kb objects each backup is going to add to costs and hurt performance + +## Storage Classes, considered + +The AWS Storage classes are STANDARD | REDUCED_REDUNDANCY | STANDARD_IA | +ONEZONE_IA | INTELLIGENT_TIERING | GLACIER | DEEP_ARCHIVE | OUTPOSTS | +GLACIER_IR + +of which we won’t consider REDUCED_REDUNDANCY (it’s outdated and Standard is now +cheaper) and OUTPOSTS (if you need on-prem S3, it’s not for cost or efficiency). + +### STANDARD + +The S3 Standard storage should work for all backup implementations, as long as +you’re not using something that can’t really work with object storage with +network latency (for example your backup application is trying to do fine-grained +low-latency database-style queries using indices stored in S3). + +For Corso, Standard is a great place to start testing your setup, letting you +perform regular backups, restores, and deletions. We also recommend storing all +your non-blob data in Standard, how to do this automatically is covered at the +end of this list. + +### STANDARD_IA and ONEZONE_IA + +These are the storage classes AWS recommends for backups! But it’s likely that +Glacier Instant Retrieval will be cheaper. Also, Infrequent Access charges a +minimum storage size of 128KB and a minimum storage time of 30 days. If your +backups are creating many small objects, or if you have incremental backups +constantly updating most objects, Infrequent Access may come out more expensive +than standard. + +For Corso, it’s not likely that this storage class will make the most sense. +Maybe a case where periodic restores are expected with some frequency would +benefit from this class, but that would have to be so frequent I’m not sure +‘backup’ is the right term. If you found this was the best class for you please +join our Discord and tell us about it. + +### INTELLIGENT_TIERING + +Intelligent Tiering is the most appealing of AWS’s new S3 offerings for backups. +As objects age they’ll move down to cheaper and cheaper, finally dropping to the +same storage costs per GB as Glacier Instant Retrieval. + +Two considerations should give you pause when using Intelligent Tiering for backups: first +there’s a small compute cost to Intelligent Tiering, and second you probably +do know the usage pattern of these backups: almost all will never be touched. + +With Intelligent Tiering you’ll pay for your backups to be on a more expensive +tier for 60 days before you get the pricing that you probably could have picked +out for yourself in the first place. + +Intelligent Tiering probably only makes sense if you’re using backups in a +nonstandard way, for example restoring from backups every morning. If you’re not sure +*how* your data will be used, Intelligent Tiering is a safe bet. + + +### GLACIER and DEEP_ARCHIVE + +Glacier (not Instant retrieval, which is discussed below) is a great way to +archive data, which is a slightly different idea than backups. If you have a +reason to store and not touch data (for example, for compliance) and can tolerate +extremely high latencies (hours to days) for recovery you may want to use +Glacier Archive. However, high-performance backup tools, like Corso, usually +contain smart optimizations like incremental backups and backup indexes that +won’t work if the latency for all requests is in minutes. Further, for cost and +efficiency, deduplicating object stores will often compact data as the primary +data source churns. Using default Glacier or Glacier Deep Archive is a poor fit +for that workload. + +### GLACIER_IR + +Likely to be your best option for backups Glacier IR is cheaper than any +non-glacier option for storage costs, with a low request latency. Corso’s +de-duplication, bundling, and compression will help ensure that you’re paying as +little as possible for storage. + +## Glacier Instant Retrieval is the best choice for Corso backups + +With these considerations, and with the best practices mentioned above, you +should be able to build reliable backups with a minimal cost impact. If you’re +ready to give Corso a try, check out our +[Quickstart Guide](https://corsobackup.io/docs/quickstart/), or take a look at a +recent article on backing up +[large Exchange instances](https://corsobackup.io/blog/large-microsoft-365-exchange-backups/) +with Corso. diff --git a/website/blog/images/box_sizes.jpeg b/website/blog/images/box_sizes.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fcd68e8113a298095999880514d0d5311c89829f GIT binary patch literal 547865 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

    Z0@_o0P3{ky~poAgm7OH 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 literal 0 HcmV?d00001 diff --git a/website/styles/Vocab/Base/accept.txt b/website/styles/Vocab/Base/accept.txt index 91dc74dc2..7f8d159c7 100644 --- a/website/styles/Vocab/Base/accept.txt +++ b/website/styles/Vocab/Base/accept.txt @@ -53,4 +53,5 @@ SMBs Demetrius Malbrough lockdowns -exfiltrate \ No newline at end of file +exfiltrate +deduplicating \ No newline at end of file From ec30c9ccce7857265db790ee54162bf8d2e3b529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C4=8Dnica=20Mellifera?= Date: Tue, 4 Apr 2023 15:53:13 -0700 Subject: [PATCH 25/37] fix preview text for blog post (#3030) --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [ ] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [ ] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- website/blog/2023-4-04-aws-storage-class.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/website/blog/2023-4-04-aws-storage-class.md b/website/blog/2023-4-04-aws-storage-class.md index b94d5e6d5..e9a5a4987 100644 --- a/website/blog/2023-4-04-aws-storage-class.md +++ b/website/blog/2023-4-04-aws-storage-class.md @@ -1,9 +1,7 @@ --- slug: aws-storage-class title: "Choosing the Best AWS S3 Storage Class for Corso Backups" -description: "By watching my -four short videos, you’ll be set up and on your way to backing up all your Microsoft 365 -data in less than 20 minutes. That’s shorter than most meetings!" +description: "Recently when writing about the storage options for Corso, I found myself going pretty far in the weeds on storage classes in S3. I thought I’d make a list of all the storage options and why they might, or might not, work for backups." authors: nica tags: [corso, microsoft 365, AWS, backups] date: 2023-04-04 From c949c333e4022c4a4b8a4715db31a010b3222cbb Mon Sep 17 00:00:00 2001 From: Keepers Date: Tue, 4 Apr 2023 18:54:04 -0600 Subject: [PATCH 26/37] fix user validation in factory (#3031) #### Type of change - [x] :bug: Bugfix #### Test Plan - [x] :muscle: Manual - [x] :green_heart: E2E --- src/cmd/factory/impl/common.go | 12 ++++-------- src/pkg/services/m365/m365.go | 6 ++++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/cmd/factory/impl/common.go b/src/cmd/factory/impl/common.go index e2dd3c1f7..17dd0b922 100644 --- a/src/cmd/factory/impl/common.go +++ b/src/cmd/factory/impl/common.go @@ -88,8 +88,7 @@ func generateAndRestoreItems( service, tenantID, userID, dest, - collections, - ) + collections) if err != nil { return nil, err } @@ -121,21 +120,18 @@ func getGCAndVerifyUser(ctx context.Context, userID string) (*connector.GraphCon return nil, account.Account{}, clues.Wrap(err, "finding m365 account details") } - // build a graph connector // TODO: log/print recoverable errors errs := fault.New(false) - normUsers := map[string]struct{}{} ins, err := m365.UsersMap(ctx, acct, errs) if err != nil { return nil, account.Account{}, clues.Wrap(err, "getting tenant users") } - for _, k := range ins.IDs() { - normUsers[strings.ToLower(k)] = struct{}{} - } + _, idOK := ins.NameOf(strings.ToLower(userID)) + _, nameOK := ins.IDOf(strings.ToLower(userID)) - if _, ok := normUsers[strings.ToLower(User)]; !ok { + if !idOK && !nameOK { return nil, account.Account{}, clues.New("user not found within tenant") } diff --git a/src/pkg/services/m365/m365.go b/src/pkg/services/m365/m365.go index 3815cdd46..e5dc658a4 100644 --- a/src/pkg/services/m365/m365.go +++ b/src/pkg/services/m365/m365.go @@ -2,6 +2,7 @@ package m365 import ( "context" + "strings" "github.com/alcionai/clues" "github.com/microsoftgraph/msgraph-sdk-go/models" @@ -75,8 +76,9 @@ func UsersMap( ) for _, u := range users { - idToName[u.ID] = u.PrincipalName - nameToID[u.PrincipalName] = u.ID + id, name := strings.ToLower(u.ID), strings.ToLower(u.PrincipalName) + idToName[id] = name + nameToID[name] = id } ins := common.IDsNames{ From 7a04f49392af565b6ccca763f6234f3f4014dffb Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Tue, 4 Apr 2023 18:37:55 -0700 Subject: [PATCH 27/37] Bump clues version to HEAD of main (#3033) Clues is pointing to a commit on a branch that was merged to main and deleted. This is giving some folks errors when running `go mod tidy` --- #### 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 - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * closes #3032 #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/go.mod | 2 +- src/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/go.mod b/src/go.mod index 307b5d92f..3bc03d58a 100644 --- a/src/go.mod +++ b/src/go.mod @@ -6,7 +6,7 @@ replace github.com/kopia/kopia => github.com/alcionai/kopia v0.12.2-0.2023040317 require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 - github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0 + github.com/alcionai/clues v0.0.0-20230331202049-339059c90c6e github.com/armon/go-metrics v0.4.0 github.com/aws/aws-sdk-go v1.44.233 github.com/aws/aws-xray-sdk-go v1.8.1 diff --git a/src/go.sum b/src/go.sum index 06d249bd7..cac8cbdd1 100644 --- a/src/go.sum +++ b/src/go.sum @@ -53,8 +53,8 @@ github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1o github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= -github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0 h1:2Fv5zc02wURwUv3Gjo3oqGybSj5tNaXyNIijlrR8SI0= -github.com/alcionai/clues v0.0.0-20230330224331-77c1b3be97e0/go.mod h1:DeaMbAwDvYM6ZfPMR/GUl3hceqI5C8jIQ1lstjB2IW8= +github.com/alcionai/clues v0.0.0-20230331202049-339059c90c6e h1:3M/ND3HBj5U2N0q2l7sMbkKTagPMbCnp7Lk6i5bVX4Q= +github.com/alcionai/clues v0.0.0-20230331202049-339059c90c6e/go.mod h1:DeaMbAwDvYM6ZfPMR/GUl3hceqI5C8jIQ1lstjB2IW8= github.com/alcionai/kopia v0.12.2-0.20230403174648-98bfae225045 h1:KalMY/JU+3t/3IosvP8yLdUWqcy+mAupTjFeV7I+wHg= github.com/alcionai/kopia v0.12.2-0.20230403174648-98bfae225045/go.mod h1:WGFVh9/5R3bi6vgGw7pPR65I32cyKJjb854467Goz0w= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= From a2e669a3a40cef12da3eb1938f459e5a97b867a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 06:08:13 +0000 Subject: [PATCH 28/37] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20mermaid=20fro?= =?UTF-8?q?m=2010.0.2=20to=2010.1.0=20in=20/website=20(#3036)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- website/package-lock.json | 176 +++++++++++++++++++++++++++++--------- website/package.json | 2 +- 2 files changed, 136 insertions(+), 42 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index a308b2218..fd5097e31 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -20,7 +20,7 @@ "feather-icons": "^4.29.0", "jarallax": "^2.1.3", "mdx-mermaid": "^1.3.2", - "mermaid": "^10.0.2", + "mermaid": "^10.1.0", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -5758,9 +5758,9 @@ "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" }, "node_modules/d3": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.2.tgz", - "integrity": "sha512-WXty7qOGSHb7HR7CfOzwN1Gw04MUOzN8qh9ZUsvwycIMb4DYMpY9xczZ6jUorGtO6bR9BPMPaueIKwiDxu9uiQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.4.tgz", + "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -5798,9 +5798,9 @@ } }, "node_modules/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz", + "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==", "dependencies": { "internmap": "1 - 2" }, @@ -5862,9 +5862,9 @@ } }, "node_modules/d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "dependencies": { "delaunator": "5" }, @@ -6147,9 +6147,9 @@ } }, "node_modules/dagre-d3-es": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", - "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", "dependencies": { "d3": "^7.8.2", "lodash-es": "^4.17.21" @@ -6530,9 +6530,9 @@ } }, "node_modules/dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", + "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==" }, "node_modules/domutils": { "version": "2.8.0", @@ -9151,18 +9151,19 @@ } }, "node_modules/mermaid": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.0.2.tgz", - "integrity": "sha512-slwoB9WdNUT+/W9VhxLYRLZ0Ey12fIE+cAZjm3FmHTD+0F1uoJETfsNbVS1POnvQZhFYzfT6/z6hJZXgecqVBA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.1.0.tgz", + "integrity": "sha512-LYekSMNJygI1VnMizAPUddY95hZxOjwZxr7pODczILInO0dhQKuhXeu4sargtnuTwCilSuLS7Uiq/Qn7HTVrmA==", "dependencies": { "@braintree/sanitize-url": "^6.0.0", + "@khanacademy/simple-markdown": "^0.8.6", "cytoscape": "^3.23.0", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.1.0", "d3": "^7.4.0", - "dagre-d3-es": "7.0.9", + "dagre-d3-es": "7.0.10", "dayjs": "^1.11.7", - "dompurify": "2.4.3", + "dompurify": "2.4.5", "elkjs": "^0.8.2", "khroma": "^2.0.0", "lodash-es": "^4.17.21", @@ -9173,6 +9174,57 @@ "web-worker": "^1.2.0" } }, + "node_modules/mermaid/node_modules/@khanacademy/simple-markdown": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@khanacademy/simple-markdown/-/simple-markdown-0.8.6.tgz", + "integrity": "sha512-mAUlR9lchzfqunR89pFvNI51jQKsMpJeWYsYWw0DQcUXczn/T/V6510utgvm7X0N3zN87j1SvuKk8cMbl9IAFw==", + "dependencies": { + "@types/react": ">=16.0.0" + }, + "peerDependencies": { + "react": "16.14.0", + "react-dom": "16.14.0" + } + }, + "node_modules/mermaid/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mermaid/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/mermaid/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "node_modules/mermaid/node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -18617,9 +18669,9 @@ } }, "d3": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.2.tgz", - "integrity": "sha512-WXty7qOGSHb7HR7CfOzwN1Gw04MUOzN8qh9ZUsvwycIMb4DYMpY9xczZ6jUorGtO6bR9BPMPaueIKwiDxu9uiQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.4.tgz", + "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==", "requires": { "d3-array": "3", "d3-axis": "3", @@ -18654,9 +18706,9 @@ } }, "d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz", + "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==", "requires": { "internmap": "1 - 2" } @@ -18700,9 +18752,9 @@ } }, "d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "requires": { "delaunator": "5" } @@ -18895,9 +18947,9 @@ } }, "dagre-d3-es": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", - "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", "requires": { "d3": "^7.8.2", "lodash-es": "^4.17.21" @@ -19160,9 +19212,9 @@ } }, "dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", + "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==" }, "domutils": { "version": "2.8.0", @@ -20937,18 +20989,19 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "mermaid": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.0.2.tgz", - "integrity": "sha512-slwoB9WdNUT+/W9VhxLYRLZ0Ey12fIE+cAZjm3FmHTD+0F1uoJETfsNbVS1POnvQZhFYzfT6/z6hJZXgecqVBA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.1.0.tgz", + "integrity": "sha512-LYekSMNJygI1VnMizAPUddY95hZxOjwZxr7pODczILInO0dhQKuhXeu4sargtnuTwCilSuLS7Uiq/Qn7HTVrmA==", "requires": { "@braintree/sanitize-url": "^6.0.0", + "@khanacademy/simple-markdown": "^0.8.6", "cytoscape": "^3.23.0", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.1.0", "d3": "^7.4.0", - "dagre-d3-es": "7.0.9", + "dagre-d3-es": "7.0.10", "dayjs": "^1.11.7", - "dompurify": "2.4.3", + "dompurify": "2.4.5", "elkjs": "^0.8.2", "khroma": "^2.0.0", "lodash-es": "^4.17.21", @@ -20959,6 +21012,47 @@ "web-worker": "^1.2.0" }, "dependencies": { + "@khanacademy/simple-markdown": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@khanacademy/simple-markdown/-/simple-markdown-0.8.6.tgz", + "integrity": "sha512-mAUlR9lchzfqunR89pFvNI51jQKsMpJeWYsYWw0DQcUXczn/T/V6510utgvm7X0N3zN87j1SvuKk8cMbl9IAFw==", + "requires": { + "@types/react": ">=16.0.0" + } + }, + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", diff --git a/website/package.json b/website/package.json index e88d720bb..b1bd397fd 100644 --- a/website/package.json +++ b/website/package.json @@ -26,7 +26,7 @@ "feather-icons": "^4.29.0", "jarallax": "^2.1.3", "mdx-mermaid": "^1.3.2", - "mermaid": "^10.0.2", + "mermaid": "^10.1.0", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2", From 7dda79a97c7f05fdc4dde308536d1bf94c01ba8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C4=8Dnica=20Mellifera?= Date: Wed, 5 Apr 2023 09:31:35 -0700 Subject: [PATCH 29/37] Malware Blog (#2919) --- #### 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 - [x] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [ ] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --------- Co-authored-by: Georgi Matev --- website/blog/2023-04-08-malware.md | 111 +++++++++++++++++++++++++++++ website/blog/images/invaders.png | Bin 0 -> 438227 bytes website/blog/images/malware1.png | Bin 0 -> 203579 bytes website/blog/images/malware2.png | Bin 0 -> 336927 bytes 4 files changed, 111 insertions(+) create mode 100644 website/blog/2023-04-08-malware.md create mode 100644 website/blog/images/invaders.png create mode 100644 website/blog/images/malware1.png create mode 100644 website/blog/images/malware2.png diff --git a/website/blog/2023-04-08-malware.md b/website/blog/2023-04-08-malware.md new file mode 100644 index 000000000..6f07fb9b1 --- /dev/null +++ b/website/blog/2023-04-08-malware.md @@ -0,0 +1,111 @@ +--- +slug: malware-detection +title: "Microsoft 365, Malware 👾, and your responsibilities" +description: "When we evaluate malware threats, we often think mainly of protecting our users. +The biggest concern is always going to be lost availability and leaked data if +malware affects our system. But like any threat with an infection model, part of +the story is about your responsibilities as an operations engineer to keep +others safe." +authors: nica +tags: [corso, microsoft 365, backups, security, malware] +date: 2023-04-08 +image: ./images/invaders.png +--- + +![a clone of the game 'space invaders' Cover image By Lee Robinson - https://github.com/leerob/space-invaders, MIT, https://commons.wikimedia.org/w/index.php?curid=127314893](./images/invaders.png) + +When we evaluate malware threats, we often think mainly of protecting our users. +The biggest concern is always going to be lost availability and leaked data if +malware affects our system. But like any threat with an infection model, part of +the story is about your responsibilities as an operations engineer to keep +others safe. + + +## Microsoft-hosted Malware + +Research earlier in 2023 showed that Microsoft OneDrive was +[host to about 30% of all malware](https://www.cybertalk.org/2023/01/27/do-you-use-onedrive-or-google-drive-watch-out-for-this-malware/). +OneDrive is a popular platform for hosting malware because the malicious actor +can get a legitimate looking URL that will increase the chance of their payload +being downloaded or executed. + +This malware hosting is usually done on accounts created by malicious actors, +but it's even more effective if a compromised account within a legitimate +organization can be used + +The responsibility for addressing this issue lies more with administrators than +with Microsoft. +Data on OneDrive is customer data and it will be intrusive and disruptive +for Microsoft to automatically start taking down files. + +Anyone running OneDrive and SharePoint should take measures to detect and remove +malware - to protect their own users and the broader community. + +If you accept that as Microsoft 365 and OneDrive user you should ‘be +part of the solution’, how can you take a stand against malware? + +## Scan for Malware + +Sophisticated malware is difficult to engineer. Threats like BazarLoader, which +use a Trojan horse to create an ISO which waits for the user to open an +innocent-looking ‘Documents’ folder, aren’t being developed from scratch every +day. Therefore, it’s possible to scan for malware and find most threats before +they affect large numbers of systems. + +While there are a number of tools to scan backups, attachments, and other file +locations, I’m pleased to say that Corso has implemented +[malware scanning for your backups as of V0.5.0](https://github.com/alcionai/corso/releases/tag/v0.5.0). +Corso aims to prevent content already flagged as malware from making it in your +backups. Since Corso is free and open-source, admins can take advantage of this +and take action (for example delete, extract for forensic analysis) against files +flagged by Corso. + +## See it in Action: Create a Malware-Free Backup with Corso + +We hope that the first time you use a tool like Corso to scan your backups, you will +have no malware detected. This however begs the question: how do we know it’s +working? + +Good news: there are long-standing resources to grab ‘known bad’ files that +should set off any malware or virus scanner. The European Institute for Computer +Anti-Virus Research (EICAR) have made such a file available. With this rather +choice paragraph about why a non-virus ‘known bad’ file is useful for security +practices: + +> Using real viruses for testing in the real world is rather like setting fire +> to the dustbin in your office to see whether the smoke detector is working. +> Such a test will give meaningful results, but with unappealing, unacceptable +> risks. + +Download the EICAR test file here. Any scanner worth its salt will alert on at +least the first two versions of the file (`eicar.com` and `eicar.com.txt`) and +*should* notice malware inside a .zip as well. When using Corso with any of +these files, the feedback is quite clear: + +![Corso giving feedback](./images/malware1.png) + +Any detected files will be listed as 'skipped' and the rest of the backup will complete as normal. + +## What to do when Corso Detects Malware + +Files that Corso detects as malware will be skipped from backups, but you should +take steps to delete these files and do some analysis of their source within +your OneDrive instance. When Corso detects malware, it will log the fact +(Corso’s log location is displayed when the CLI runs). + +![Image of Corso logging errors and exceptions, with one item of malware detected](./images/malware2.png) + +Lines for detected malware will show up marked as `malware detected` and will even have a `malware_description` parameter. + +## Monitor for new reports + +The landscape for malware is shifting, and it’s vital you stay on top of new reports. Three sources of updates I’d recommend: + +- [Microsoft’s Vulnerabilities Registry](https://msrc.microsoft.com/update-guide/vulnerability) +- [The Malwarebytes blog](https://www.malwarebytes.com/blog) +- [The Register’s tech news](https://www.theregister.com/), for a more industry-wide view of trends and major issues + + +If you keep these practices in place in your organization, not only are you less +likely to suffer from malware attacks, but the danger of your playing host to +malicious files and attacks on others will be greatly reduced! diff --git a/website/blog/images/invaders.png b/website/blog/images/invaders.png new file mode 100644 index 0000000000000000000000000000000000000000..b99f39ff10aab9fe3beb506c7308671e5159a773 GIT binary patch literal 438227 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 z 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 c|05uK@MoS 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

    2v$l#5O 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

    *mX~#5K~K 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%0D}q=_Jo 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 Kcpli1FzkO!*x983 literal 0 HcmV?d00001 diff --git a/website/blog/images/malware2.png b/website/blog/images/malware2.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a662e9f2fb62c87e74badb0577c9070b9223db GIT binary patch literal 336927 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%0DUt*^;FtN?v1an74saFf&D%j(lfc)(W1_6 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

    rl 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�opH2p7u$YXk?{3cOQFlR%@^JiC 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 Date: Wed, 5 Apr 2023 11:43:02 -0600 Subject: [PATCH 30/37] No warn logs (#3024) #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :broom: Tech Debt/Cleanup #### Test Plan - [x] :muscle: Manual --- src/.golangci.yml | 6 ++++-- .../connector/exchange/api/contacts.go | 5 ++--- src/internal/connector/exchange/api/events.go | 5 ++--- src/internal/connector/exchange/api/mail.go | 5 ++--- src/internal/connector/onedrive/drive_test.go | 18 +++++++++++------- src/internal/connector/onedrive/item.go | 2 +- src/internal/events/events_signal_windows.go | 2 +- 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/.golangci.yml b/src/.golangci.yml index 15f93b7b4..f0ce30498 100644 --- a/src/.golangci.yml +++ b/src/.golangci.yml @@ -29,7 +29,7 @@ linters-settings: forbid: # Don't allow creating contexts without logging in tests. Use an ignore # lower down to ensure usages of this outside of tests aren't reported. - - 'context\.(Background|TODO)(# tests should use tester\.NewContext )?' + - 'context\.(Background|TODO)(# tests should use tester\.NewContext)?' # Don't allow use of path as it hardcodes separator to `/`. # Use filepath instead. - '\bpath\.(Ext|Base|Dir|Join)' @@ -38,10 +38,12 @@ linters-settings: # Don't allow use of testify suite directly. Use one of the wrappers from # tester/suite.go instead. Use an ignore lower down to exclude packages # that result in import cycles if they try to use the wrapper. - - 'suite\.Suite(# tests should use one of the Suite wrappers in tester package )?' + - 'suite\.Suite(# tests should use one of the Suite wrappers in tester package)?' # All errors should be constructed and wrapped with the clues package. # String formatting should be avoided in favor of structured errors (ie: err.With(k, v)). - '(errors|fmt)\.(New|Stack|Wrap|Error)f?\((# error handling should use clues pkg)?' + # Avoid Warn-level logging in favor of Info or Error. + - 'Warn[wf]?\((# logging should use Info or Error)?' lll: line-length: 120 revive: diff --git a/src/internal/connector/exchange/api/contacts.go b/src/internal/connector/exchange/api/contacts.go index 90af25bac..f4f768519 100644 --- a/src/internal/connector/exchange/api/contacts.go +++ b/src/internal/connector/exchange/api/contacts.go @@ -258,11 +258,10 @@ func (c Contacts) GetAddedAndRemovedItemIDs( if len(os.Getenv("CORSO_URL_LOGGING")) > 0 { gri, err := builder.ToGetRequestInformation(ctx, options) if err != nil { - logger.Ctx(ctx).Errorw("getting builder info", "error", err) + logger.CtxErr(ctx, err).Error("getting builder info") } else { logger.Ctx(ctx). - With("user", user, "container", directoryID). - Warnw("builder path-parameters", "path_parameters", gri.PathParameters) + Infow("builder path-parameters", "path_parameters", gri.PathParameters) } } diff --git a/src/internal/connector/exchange/api/events.go b/src/internal/connector/exchange/api/events.go index 421e4a66b..dfa4d8541 100644 --- a/src/internal/connector/exchange/api/events.go +++ b/src/internal/connector/exchange/api/events.go @@ -292,11 +292,10 @@ func (c Events) GetAddedAndRemovedItemIDs( if len(os.Getenv("CORSO_URL_LOGGING")) > 0 { gri, err := builder.ToGetRequestInformation(ctx, nil) if err != nil { - logger.Ctx(ctx).Errorw("getting builder info", "error", err) + logger.CtxErr(ctx, err).Error("getting builder info") } else { logger.Ctx(ctx). - With("user", user, "container", calendarID). - Warnw("builder path-parameters", "path_parameters", gri.PathParameters) + Infow("builder path-parameters", "path_parameters", gri.PathParameters) } } diff --git a/src/internal/connector/exchange/api/mail.go b/src/internal/connector/exchange/api/mail.go index 095ab1525..03c302461 100644 --- a/src/internal/connector/exchange/api/mail.go +++ b/src/internal/connector/exchange/api/mail.go @@ -303,11 +303,10 @@ func (c Mail) GetAddedAndRemovedItemIDs( if len(os.Getenv("CORSO_URL_LOGGING")) > 0 { gri, err := builder.ToGetRequestInformation(ctx, options) if err != nil { - logger.Ctx(ctx).Errorw("getting builder info", "error", err) + logger.CtxErr(ctx, err).Error("getting builder info") } else { logger.Ctx(ctx). - With("user", user, "container", directoryID). - Warnw("builder path-parameters", "path_parameters", gri.PathParameters) + Infow("builder path-parameters", "path_parameters", gri.PathParameters) } } diff --git a/src/internal/connector/onedrive/drive_test.go b/src/internal/connector/onedrive/drive_test.go index 930569a94..26f8c5c85 100644 --- a/src/internal/connector/onedrive/drive_test.go +++ b/src/internal/connector/onedrive/drive_test.go @@ -299,11 +299,13 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() { ctx, flush := tester.NewContext() defer flush() - t := suite.T() - folderIDs := []string{} - folderName1 := "Corso_Folder_Test_" + common.FormatNow(common.SimpleTimeTesting) - folderElements := []string{folderName1} - gs := loadTestService(t) + var ( + t = suite.T() + folderIDs = []string{} + folderName1 = "Corso_Folder_Test_" + common.FormatNow(common.SimpleTimeTesting) + folderElements = []string{folderName1} + gs = loadTestService(t) + ) pager, err := PagerForSource(OneDriveSource, gs, suite.userID, nil) require.NoError(t, err, clues.ToCore(err)) @@ -317,11 +319,13 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() { defer func() { for _, id := range folderIDs { + ictx := clues.Add(ctx, "folder_id", id) + // deletes require unique http clients // https://github.com/alcionai/corso/issues/2707 - err := DeleteItem(ctx, loadTestService(t), driveID, id) + err := DeleteItem(ictx, loadTestService(t), driveID, id) if err != nil { - logger.Ctx(ctx).Warnw("deleting folder", "id", id, "error", err) + logger.CtxErr(ictx, err).Errorw("deleting folder") } } }() diff --git a/src/internal/connector/onedrive/item.go b/src/internal/connector/onedrive/item.go index 8eddfb6d6..6f9a2e0ab 100644 --- a/src/internal/connector/onedrive/item.go +++ b/src/internal/connector/onedrive/item.go @@ -280,7 +280,7 @@ func filterUserPermissions(ctx context.Context, perms []models.Permissionable) [ if gv2.GetDevice() != nil { logm.With("application_id", ptr.Val(gv2.GetDevice().GetId())) } - logm.Warn("untracked permission") + logm.Info("untracked permission") } // Technically GrantedToV2 can also contain devices, but the diff --git a/src/internal/events/events_signal_windows.go b/src/internal/events/events_signal_windows.go index 86ae519d8..d5119e476 100644 --- a/src/internal/events/events_signal_windows.go +++ b/src/internal/events/events_signal_windows.go @@ -7,5 +7,5 @@ import ( ) func signalDump(ctx context.Context) { - logger.Ctx(ctx).Warn("cannot send signal on Windows") + logger.Ctx(ctx).Error("cannot send signal on Windows") } From 86c72089a16f000531b78e91d7a880fac5776fee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 18:57:33 +0000 Subject: [PATCH 31/37] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20github.com/ar?= =?UTF-8?q?mon/go-metrics=20from=200.4.0=20to=200.4.1=20in=20/src=20(#2968?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/armon/go-metrics](https://github.com/armon/go-metrics) from 0.4.0 to 0.4.1.

    Release notes

    Sourced from github.com/armon/go-metrics's releases.

    v0.4.1

    Includes a performance improvement in the Prometheus sink that was identified as wasting CPU time in Nomad where metrics are recorded in a hot code path.

    See armon/go-metrics#138

    Commits
    • b6d5c86 Merge pull request #138 from jrasell/jrasell/f-improve-prom-flatten-key-perf
    • 2a21e9d prometheus: improve flatten key performance.
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/armon/go-metrics&package-manager=go_modules&previous-version=0.4.0&new-version=0.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --- src/go.mod | 2 +- src/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/go.mod b/src/go.mod index 3bc03d58a..805c7b910 100644 --- a/src/go.mod +++ b/src/go.mod @@ -7,7 +7,7 @@ replace github.com/kopia/kopia => github.com/alcionai/kopia v0.12.2-0.2023040317 require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 github.com/alcionai/clues v0.0.0-20230331202049-339059c90c6e - github.com/armon/go-metrics v0.4.0 + github.com/armon/go-metrics v0.4.1 github.com/aws/aws-sdk-go v1.44.233 github.com/aws/aws-xray-sdk-go v1.8.1 github.com/cenkalti/backoff/v4 v4.2.0 diff --git a/src/go.sum b/src/go.sum index cac8cbdd1..f90ac498d 100644 --- a/src/go.sum +++ b/src/go.sum @@ -64,8 +64,8 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/aws/aws-sdk-go v1.44.233 h1:KB3p/yL32oG/aF4Ld0Ui9CU0tdezvhX6Xdqpb8vyP3U= github.com/aws/aws-sdk-go v1.44.233/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-xray-sdk-go v1.8.1 h1:O4pXV+hnCskaamGsZnFpzHyAmgPGusBMN6i7nnsy0Fo= From 0d521bb5a72a67fe082c44a8b91bafac14b5b0ef Mon Sep 17 00:00:00 2001 From: Keepers Date: Wed, 5 Apr 2023 13:38:22 -0600 Subject: [PATCH 32/37] move sharepoint onto map-based lookup (#2958) Refactors the sharepoint site lookup to use the id-to-name maps. This has a momentary regression that will get solved in the next PR: we no longer match on weburl suffixes, and instead require a complete match. Also, migrates the sharepoint lookup code out of GC and into Discovery. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Issue(s) * #2825 * #1995 * #1547 #### Test Plan - [x] :zap: Unit test - [x] :green_heart: E2E --- src/cli/backup/exchange.go | 2 +- src/cli/backup/sharepoint.go | 49 ++--- src/cli/backup/sharepoint_test.go | 70 ++++--- src/cli/print/print.go | 2 +- src/internal/common/ptr/pointer.go | 7 + src/internal/connector/data_collections.go | 2 +- .../connector/data_collections_test.go | 10 + src/internal/connector/discovery/api/sites.go | 142 +++++++++++++ .../connector/discovery/api/sites_test.go | 155 ++++++++++++++ src/internal/connector/discovery/discovery.go | 42 +++- .../connector/discovery/discovery_test.go | 93 +++++++-- src/internal/connector/graph_connector.go | 194 +----------------- .../graph_connector_disconnected_test.go | 56 ----- .../connector/graph_connector_test.go | 143 ++----------- .../operations/backup_integration_test.go | 5 + src/internal/operations/restore_test.go | 10 + src/pkg/services/m365/m365.go | 103 ++++++---- src/pkg/services/m365/m365_test.go | 1 + 18 files changed, 588 insertions(+), 498 deletions(-) create mode 100644 src/internal/connector/discovery/api/sites.go create mode 100644 src/internal/connector/discovery/api/sites_test.go diff --git a/src/cli/backup/exchange.go b/src/cli/backup/exchange.go index bf6fb410d..680d6ed83 100644 --- a/src/cli/backup/exchange.go +++ b/src/cli/backup/exchange.go @@ -166,7 +166,7 @@ func createExchangeCmd(cmd *cobra.Command, args []string) error { ins, err := m365.UsersMap(ctx, *acct, errs) if err != nil { - return Only(ctx, clues.Wrap(err, "Failed to retrieve M365 user(s)")) + return Only(ctx, clues.Wrap(err, "Failed to retrieve M365 users")) } selectorSet := []selectors.Selector{} diff --git a/src/cli/backup/sharepoint.go b/src/cli/backup/sharepoint.go index 32062cb11..93c2c6be2 100644 --- a/src/cli/backup/sharepoint.go +++ b/src/cli/backup/sharepoint.go @@ -7,18 +7,20 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/pflag" + "golang.org/x/exp/slices" "github.com/alcionai/corso/src/cli/options" . "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" - "github.com/alcionai/corso/src/internal/connector" - "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/fault" + "github.com/alcionai/corso/src/pkg/filters" "github.com/alcionai/corso/src/pkg/path" "github.com/alcionai/corso/src/pkg/repository" "github.com/alcionai/corso/src/pkg/selectors" + "github.com/alcionai/corso/src/pkg/services/m365" ) // ------------------------------------------------------------------------------------------------ @@ -154,20 +156,19 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { // TODO: log/print recoverable errors errs := fault.New(false) - // TODO: discovery of sharepoint sites instead of early GC construction. - gc, err := connector.NewGraphConnector(ctx, graph.HTTPClient(graph.NoTimeout()), *acct, connector.Sites, errs) + ins, err := m365.SitesMap(ctx, *acct, errs) if err != nil { - return Only(ctx, clues.Wrap(err, "Failed to connect to Microsoft APIs")) + return Only(ctx, clues.Wrap(err, "Failed to retrieve M365 sites")) } - sel, err := sharePointBackupCreateSelectors(ctx, utils.SiteIDFV, utils.WebURLFV, utils.CategoryDataFV, gc) + sel, err := sharePointBackupCreateSelectors(ctx, ins, utils.SiteIDFV, utils.WebURLFV, utils.CategoryDataFV) if err != nil { return Only(ctx, clues.Wrap(err, "Retrieving up sharepoint sites by ID and URL")) } selectorSet := []selectors.Selector{} - for _, discSel := range sel.SplitByResourceOwner(gc.GetSiteIDs()) { + for _, discSel := range sel.SplitByResourceOwner(ins.IDs()) { selectorSet = append(selectorSet, discSel.Selector) } @@ -176,7 +177,7 @@ func createSharePointCmd(cmd *cobra.Command, args []string) error { r, "SharePoint", "site", selectorSet, - nil) // TODO: prepopulate ids,names + ins) } func validateSharePointBackupCreateFlags(sites, weburls, cats []string) error { @@ -202,44 +203,28 @@ func validateSharePointBackupCreateFlags(sites, weburls, cats []string) error { // TODO: users might specify a data type, this only supports AllData(). func sharePointBackupCreateSelectors( ctx context.Context, + ins common.IDNameSwapper, sites, weburls, cats []string, - gc *connector.GraphConnector, ) (*selectors.SharePointBackup, error) { if len(sites) == 0 && len(weburls) == 0 { return selectors.NewSharePointBackup(selectors.None()), nil } - for _, site := range sites { - if site == utils.Wildcard { - return includeAllSitesWithCategories(cats), nil - } + if filters.PathContains(sites).Compare(utils.Wildcard) { + return includeAllSitesWithCategories(ins, cats), nil } - for _, wURL := range weburls { - if wURL == utils.Wildcard { - return includeAllSitesWithCategories(cats), nil - } + if filters.PathContains(weburls).Compare(utils.Wildcard) { + return includeAllSitesWithCategories(ins, cats), nil } - // TODO: log/print recoverable errors - errs := fault.New(false) - - union, err := gc.UnionSiteIDsAndWebURLs(ctx, sites, weburls, errs) - if err != nil { - return nil, err - } - - sel := selectors.NewSharePointBackup(union) + sel := selectors.NewSharePointBackup(append(slices.Clone(sites), weburls...)) return addCategories(sel, cats), nil } -func includeAllSitesWithCategories(categories []string) *selectors.SharePointBackup { - sel := addCategories( - selectors.NewSharePointBackup(selectors.Any()), - categories) - - return sel +func includeAllSitesWithCategories(ins common.IDNameSwapper, categories []string) *selectors.SharePointBackup { + return addCategories(selectors.NewSharePointBackup(ins.IDs()), categories) } func addCategories(sel *selectors.SharePointBackup, cats []string) *selectors.SharePointBackup { diff --git a/src/cli/backup/sharepoint_test.go b/src/cli/backup/sharepoint_test.go index 917977cd5..578c60d99 100644 --- a/src/cli/backup/sharepoint_test.go +++ b/src/cli/backup/sharepoint_test.go @@ -11,7 +11,7 @@ import ( "github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/cli/utils/testdata" - "github.com/alcionai/corso/src/internal/connector" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/selectors" ) @@ -108,13 +108,20 @@ func (suite *SharePointSuite) TestValidateSharePointBackupCreateFlags() { } func (suite *SharePointSuite) TestSharePointBackupCreateSelectors() { - comboString := []string{"id_1", "id_2"} - gc := &connector.GraphConnector{ - Sites: map[string]string{ - "url_1": "id_1", - "url_2": "id_2", - }, - } + const ( + id1 = "id_1" + id2 = "id_2" + url1 = "url_1/foo" + url2 = "url_2/bar" + ) + + var ( + ins = common.IDsNames{ + IDToName: map[string]string{id1: url1, id2: url2}, + NameToID: map[string]string{url1: id1, url2: id2}, + } + bothIDs = []string{id1, id2} + ) table := []struct { name string @@ -137,73 +144,72 @@ func (suite *SharePointSuite) TestSharePointBackupCreateSelectors() { { name: "site wildcard", site: []string{utils.Wildcard}, - expect: selectors.Any(), + expect: bothIDs, expectScopesLen: 2, }, { name: "url wildcard", weburl: []string{utils.Wildcard}, - expect: selectors.Any(), + expect: bothIDs, expectScopesLen: 2, }, { name: "sites", - site: []string{"id_1", "id_2"}, - expect: []string{"id_1", "id_2"}, + site: []string{id1, id2}, + expect: []string{id1, id2}, expectScopesLen: 2, }, { name: "urls", - weburl: []string{"url_1", "url_2"}, - expect: []string{"id_1", "id_2"}, + weburl: []string{url1, url2}, + expect: []string{url1, url2}, expectScopesLen: 2, }, { name: "mix sites and urls", - site: []string{"id_1"}, - weburl: []string{"url_2"}, - expect: []string{"id_1", "id_2"}, + site: []string{id1}, + weburl: []string{url2}, + expect: []string{id1, url2}, expectScopesLen: 2, }, { name: "duplicate sites and urls", - site: []string{"id_1", "id_2"}, - weburl: []string{"url_1", "url_2"}, - expect: comboString, + site: []string{id1, id2}, + weburl: []string{url1, url2}, + expect: []string{id1, id2, url1, url2}, expectScopesLen: 2, }, { name: "unnecessary site wildcard", - site: []string{"id_1", utils.Wildcard}, - weburl: []string{"url_1", "url_2"}, - expect: selectors.Any(), + site: []string{id1, utils.Wildcard}, + weburl: []string{url1, url2}, + expect: bothIDs, expectScopesLen: 2, }, { name: "unnecessary url wildcard", - site: comboString, - weburl: []string{"url_1", utils.Wildcard}, - expect: selectors.Any(), + site: []string{id1}, + weburl: []string{url1, utils.Wildcard}, + expect: bothIDs, expectScopesLen: 2, }, { name: "Pages", - site: comboString, + site: bothIDs, data: []string{dataPages}, - expect: comboString, + expect: bothIDs, expectScopesLen: 1, }, } for _, test := range table { suite.Run(test.name, func() { - t := suite.T() - ctx, flush := tester.NewContext() defer flush() - sel, err := sharePointBackupCreateSelectors(ctx, test.site, test.weburl, test.data, gc) - require.NoError(t, err, clues.ToCore(err)) + t := suite.T() + sel, err := sharePointBackupCreateSelectors(ctx, ins, test.site, test.weburl, test.data) + require.NoError(t, err, clues.ToCore(err)) assert.ElementsMatch(t, test.expect, sel.DiscreteResourceOwners()) }) } diff --git a/src/cli/print/print.go b/src/cli/print/print.go index 98c774015..c15643b83 100644 --- a/src/cli/print/print.go +++ b/src/cli/print/print.go @@ -76,7 +76,7 @@ func Only(ctx context.Context, e error) error { // if s is nil, prints nothing. // Prepends the message with "Error: " func Err(ctx context.Context, s ...any) { - out(getRootCmd(ctx).ErrOrStderr()) + out(getRootCmd(ctx).ErrOrStderr(), s...) } // Errf prints the params to cobra's error writer (stdErr by default) diff --git a/src/internal/common/ptr/pointer.go b/src/internal/common/ptr/pointer.go index a8f9a02b9..fa9d3f606 100644 --- a/src/internal/common/ptr/pointer.go +++ b/src/internal/common/ptr/pointer.go @@ -43,3 +43,10 @@ func OrNow(t *time.Time) time.Time { return *t } + +// To generates a pointer from any value. Primarily useful +// for generating pointers to strings and other primitives +// without needing to store a second variable. +func To[T any](t T) *T { + return &t +} diff --git a/src/internal/connector/data_collections.go b/src/internal/connector/data_collections.go index 26a9a8a49..dac0d6f29 100644 --- a/src/internal/connector/data_collections.go +++ b/src/internal/connector/data_collections.go @@ -47,7 +47,7 @@ func (gc *GraphConnector) ProduceBackupCollections( diagnostics.Index("service", sels.Service.String())) defer end() - err := verifyBackupInputs(sels, gc.GetSiteIDs()) + err := verifyBackupInputs(sels, gc.IDNameLookup.IDs()) if err != nil { return nil, nil, clues.Stack(err).WithClues(ctx) } diff --git a/src/internal/connector/data_collections_test.go b/src/internal/connector/data_collections_test.go index a002fdc80..a50ea0106 100644 --- a/src/internal/connector/data_collections_test.go +++ b/src/internal/connector/data_collections_test.go @@ -335,9 +335,14 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar siteIDs = []string{siteID} ) + id, name, err := gc.PopulateOwnerIDAndNamesFrom(siteID, nil) + require.NoError(t, err, clues.ToCore(err)) + sel := selectors.NewSharePointBackup(siteIDs) sel.Include(sel.LibraryFolders([]string{"foo"}, selectors.PrefixMatch())) + sel.SetDiscreteOwnerIDName(id, name) + cols, excludes, err := gc.ProduceBackupCollections( ctx, sel.Selector, @@ -374,9 +379,14 @@ func (suite *ConnectorCreateSharePointCollectionIntegrationSuite) TestCreateShar siteIDs = []string{siteID} ) + id, name, err := gc.PopulateOwnerIDAndNamesFrom(siteID, nil) + require.NoError(t, err, clues.ToCore(err)) + sel := selectors.NewSharePointBackup(siteIDs) sel.Include(sel.Lists(selectors.Any())) + sel.SetDiscreteOwnerIDName(id, name) + cols, excludes, err := gc.ProduceBackupCollections( ctx, sel.Selector, diff --git a/src/internal/connector/discovery/api/sites.go b/src/internal/connector/discovery/api/sites.go new file mode 100644 index 000000000..5d64bb778 --- /dev/null +++ b/src/internal/connector/discovery/api/sites.go @@ -0,0 +1,142 @@ +package api + +import ( + "context" + "fmt" + "strings" + + "github.com/alcionai/clues" + msgraphgocore "github.com/microsoftgraph/msgraph-sdk-go-core" + "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/pkg/errors" + + "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/pkg/fault" +) + +// --------------------------------------------------------------------------- +// controller +// --------------------------------------------------------------------------- + +func (c Client) Sites() Sites { + return Sites{c} +} + +// Sites is an interface-compliant provider of the client. +type Sites struct { + Client +} + +// --------------------------------------------------------------------------- +// methods +// --------------------------------------------------------------------------- + +// GetAll retrieves all sites. +func (c Sites) GetAll(ctx context.Context, errs *fault.Bus) ([]models.Siteable, error) { + service, err := c.service() + if err != nil { + return nil, err + } + + resp, err := service.Client().Sites().Get(ctx, nil) + if err != nil { + return nil, graph.Wrap(ctx, err, "getting all sites") + } + + iter, err := msgraphgocore.NewPageIterator( + resp, + service.Adapter(), + models.CreateSiteCollectionResponseFromDiscriminatorValue) + if err != nil { + return nil, graph.Wrap(ctx, err, "creating sites iterator") + } + + var ( + us = make([]models.Siteable, 0) + el = errs.Local() + ) + + iterator := func(item any) bool { + if el.Failure() != nil { + return false + } + + s, err := validateSite(item) + if errors.Is(err, errKnownSkippableCase) { + // safe to no-op + return true + } + + if err != nil { + el.AddRecoverable(graph.Wrap(ctx, err, "validating site")) + return true + } + + us = append(us, s) + + return true + } + + if err := iter.Iterate(ctx, iterator); err != nil { + return nil, graph.Wrap(ctx, err, "enumerating sites") + } + + return us, el.Failure() +} + +func (c Sites) GetByID(ctx context.Context, id string) (models.Siteable, error) { + resp, err := c.stable.Client().SitesById(id).Get(ctx, nil) + if err != nil { + return nil, graph.Wrap(ctx, err, "getting site") + } + + return resp, err +} + +// --------------------------------------------------------------------------- +// helpers +// --------------------------------------------------------------------------- + +var errKnownSkippableCase = clues.New("case is known and skippable") + +const personalSitePath = "sharepoint.com/personal/" + +// validateSite ensures the item is a Siteable, and contains the necessary +// identifiers that we handle with all users. +// returns the item as a Siteable model. +func validateSite(item any) (models.Siteable, error) { + m, ok := item.(models.Siteable) + if !ok { + return nil, clues.New(fmt.Sprintf("unexpected model: %T", item)) + } + + id := ptr.Val(m.GetId()) + if len(id) == 0 { + return nil, clues.New("missing ID") + } + + url := ptr.Val(m.GetWebUrl()) + if len(url) == 0 { + return nil, clues.New("missing webURL").With("site_id", id) // TODO: pii + } + + // personal (ie: oneDrive) sites have to be filtered out server-side. + if strings.Contains(url, personalSitePath) { + return nil, clues.Stack(errKnownSkippableCase). + With("site_id", id, "site_url", url) // TODO: pii + } + + name := ptr.Val(m.GetDisplayName()) + if len(name) == 0 { + // the built-in site at "https://{tenant-domain}/search" never has a name. + if strings.HasSuffix(url, "/search") { + return nil, clues.Stack(errKnownSkippableCase). + With("site_id", id, "site_url", url) // TODO: pii + } + + return nil, clues.New("missing site display name").With("site_id", id) + } + + return m, nil +} diff --git a/src/internal/connector/discovery/api/sites_test.go b/src/internal/connector/discovery/api/sites_test.go new file mode 100644 index 000000000..b03b464b9 --- /dev/null +++ b/src/internal/connector/discovery/api/sites_test.go @@ -0,0 +1,155 @@ +package api + +import ( + "testing" + + "github.com/alcionai/clues" + "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + + "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/pkg/account" + "github.com/alcionai/corso/src/pkg/fault" +) + +type SitesUnitSuite struct { + tester.Suite +} + +func TestSitesUnitSuite(t *testing.T) { + suite.Run(t, &SitesUnitSuite{Suite: tester.NewUnitSuite(t)}) +} + +func (suite *SitesUnitSuite) TestValidateSite() { + site := models.NewSite() + site.SetWebUrl(ptr.To("sharepoint.com/sites/foo")) + site.SetDisplayName(ptr.To("testsite")) + site.SetId(ptr.To("testID")) + + tests := []struct { + name string + args any + want models.Siteable + errCheck assert.ErrorAssertionFunc + errIsSkippable bool + }{ + { + name: "Invalid type", + args: string("invalid type"), + errCheck: assert.Error, + }, + { + name: "No ID", + args: models.NewSite(), + errCheck: assert.Error, + }, + { + name: "No WebURL", + args: func() *models.Site { + s := models.NewSite() + s.SetId(ptr.To("id")) + return s + }(), + errCheck: assert.Error, + }, + { + name: "No name", + args: func() *models.Site { + s := models.NewSite() + s.SetId(ptr.To("id")) + s.SetWebUrl(ptr.To("sharepoint.com/sites/foo")) + return s + }(), + errCheck: assert.Error, + }, + { + name: "Search site", + args: func() *models.Site { + s := models.NewSite() + s.SetId(ptr.To("id")) + s.SetWebUrl(ptr.To("sharepoint.com/search")) + return s + }(), + errCheck: assert.Error, + errIsSkippable: true, + }, + { + name: "Personal OneDrive", + args: func() *models.Site { + s := models.NewSite() + s.SetId(ptr.To("id")) + s.SetWebUrl(ptr.To("https://" + personalSitePath + "/someone's/onedrive")) + return s + }(), + errCheck: assert.Error, + errIsSkippable: true, + }, + { + name: "Valid Site", + args: site, + want: site, + errCheck: assert.NoError, + }, + } + for _, test := range tests { + suite.Run(test.name, func() { + t := suite.T() + + got, err := validateSite(test.args) + test.errCheck(t, err, clues.ToCore(err)) + + if test.errIsSkippable { + assert.ErrorIs(t, err, errKnownSkippableCase) + } + + assert.Equal(t, test.want, got) + }) + } +} + +type SitesIntgSuite struct { + tester.Suite + + creds account.M365Config +} + +func TestSitesIntgSuite(t *testing.T) { + suite.Run(t, &SitesIntgSuite{ + Suite: tester.NewIntegrationSuite( + t, + [][]string{tester.M365AcctCredEnvs, tester.AWSStorageCredEnvs}), + }) +} + +func (suite *SitesIntgSuite) SetupSuite() { + var ( + t = suite.T() + acct = tester.NewM365Account(t) + ) + + m365, err := acct.M365Config() + require.NoError(t, err, clues.ToCore(err)) + + suite.creds = m365 +} + +func (suite *SitesIntgSuite) TestGetAll() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + cli, err := NewClient(suite.creds) + require.NoError(t, err, clues.ToCore(err)) + + sites, err := cli.Sites().GetAll(ctx, fault.New(true)) + require.NoError(t, err) + require.NotZero(t, len(sites), "must have at least one site") + + for _, site := range sites { + assert.NotContains(t, ptr.Val(site.GetWebUrl()), personalSitePath, "must not return onedrive sites") + } +} diff --git a/src/internal/connector/discovery/discovery.go b/src/internal/connector/discovery/discovery.go index 0090c51ea..e955803c0 100644 --- a/src/internal/connector/discovery/discovery.go +++ b/src/internal/connector/discovery/discovery.go @@ -29,6 +29,24 @@ type getWithInfoer interface { getInfoer } +// --------------------------------------------------------------------------- +// helpers +// --------------------------------------------------------------------------- + +func apiClient(ctx context.Context, acct account.Account) (api.Client, error) { + m365, err := acct.M365Config() + if err != nil { + return api.Client{}, clues.Wrap(err, "retrieving m365 account configuration").WithClues(ctx) + } + + client, err := api.NewClient(m365) + if err != nil { + return api.Client{}, clues.Wrap(err, "creating api client").WithClues(ctx) + } + + return client, nil +} + // --------------------------------------------------------------------------- // api // --------------------------------------------------------------------------- @@ -39,19 +57,15 @@ func Users( acct account.Account, errs *fault.Bus, ) ([]models.Userable, error) { - m365, err := acct.M365Config() + client, err := apiClient(ctx, acct) if err != nil { - return nil, clues.Wrap(err, "retrieving m365 account configuration").WithClues(ctx) - } - - client, err := api.NewClient(m365) - if err != nil { - return nil, clues.Wrap(err, "creating api client").WithClues(ctx) + return nil, err } return client.Users().GetAll(ctx, errs) } +// User fetches a single user's data. func User(ctx context.Context, gwi getWithInfoer, userID string) (models.Userable, *api.UserInfo, error) { u, err := gwi.GetByID(ctx, userID) if err != nil { @@ -69,3 +83,17 @@ func User(ctx context.Context, gwi getWithInfoer, userID string) (models.Userabl return u, ui, nil } + +// Sites fetches all sharepoint sites in the tenant +func Sites( + ctx context.Context, + acct account.Account, + errs *fault.Bus, +) ([]models.Siteable, error) { + client, err := apiClient(ctx, acct) + if err != nil { + return nil, err + } + + return client.Sites().GetAll(ctx, errs) +} diff --git a/src/internal/connector/discovery/discovery_test.go b/src/internal/connector/discovery/discovery_test.go index c9a2c3f48..8191b7b3f 100644 --- a/src/internal/connector/discovery/discovery_test.go +++ b/src/internal/connector/discovery/discovery_test.go @@ -31,10 +31,11 @@ func (suite *DiscoveryIntegrationSuite) TestUsers() { ctx, flush := tester.NewContext() defer flush() - t := suite.T() - - acct := tester.NewM365Account(t) - errs := fault.New(true) + var ( + t = suite.T() + acct = tester.NewM365Account(t) + errs = fault.New(true) + ) users, err := discovery.Users(ctx, acct, errs) assert.NoError(t, err, clues.ToCore(err)) @@ -42,8 +43,7 @@ func (suite *DiscoveryIntegrationSuite) TestUsers() { ferrs := errs.Errors() assert.Nil(t, ferrs.Failure) assert.Empty(t, ferrs.Recovered) - - assert.Less(t, 0, len(users)) + assert.NotEmpty(t, users) } func (suite *DiscoveryIntegrationSuite) TestUsers_InvalidCredentials() { @@ -84,16 +84,85 @@ func (suite *DiscoveryIntegrationSuite) TestUsers_InvalidCredentials() { for _, test := range table { suite.Run(test.name, func() { - t := suite.T() + var ( + t = suite.T() + a = test.acct(t) + errs = fault.New(true) + ) - a := test.acct(t) - errs := fault.New(true) users, err := discovery.Users(ctx, a, errs) - assert.Empty(t, users, "returned some users") assert.NotNil(t, err) - // TODO(ashmrtn): Uncomment when fault package is used in discovery API. - // assert.NotNil(t, errs.Err()) + }) + } +} + +func (suite *DiscoveryIntegrationSuite) TestSites() { + ctx, flush := tester.NewContext() + defer flush() + + var ( + t = suite.T() + acct = tester.NewM365Account(t) + errs = fault.New(true) + ) + + sites, err := discovery.Sites(ctx, acct, errs) + assert.NoError(t, err, clues.ToCore(err)) + + ferrs := errs.Errors() + assert.Nil(t, ferrs.Failure) + assert.Empty(t, ferrs.Recovered) + assert.NotEmpty(t, sites) +} + +func (suite *DiscoveryIntegrationSuite) TestSites_InvalidCredentials() { + ctx, flush := tester.NewContext() + defer flush() + + table := []struct { + name string + acct func(t *testing.T) account.Account + }{ + { + name: "Invalid Credentials", + acct: func(t *testing.T) account.Account { + a, err := account.NewAccount( + account.ProviderM365, + account.M365Config{ + M365: credentials.M365{ + AzureClientID: "Test", + AzureClientSecret: "without", + }, + AzureTenantID: "data", + }, + ) + require.NoError(t, err, clues.ToCore(err)) + + return a + }, + }, + { + name: "Empty Credentials", + acct: func(t *testing.T) account.Account { + // intentionally swallowing the error here + a, _ := account.NewAccount(account.ProviderM365) + return a + }, + }, + } + + for _, test := range table { + suite.Run(test.name, func() { + var ( + t = suite.T() + a = test.acct(t) + errs = fault.New(true) + ) + + sites, err := discovery.Sites(ctx, a, errs) + assert.Empty(t, sites, "returned some sites") + assert.NotNil(t, err) }) } } diff --git a/src/internal/connector/graph_connector.go b/src/internal/connector/graph_connector.go index 36c8f34f6..0180934a9 100644 --- a/src/internal/connector/graph_connector.go +++ b/src/internal/connector/graph_connector.go @@ -4,31 +4,21 @@ package connector import ( "context" - "fmt" "net/http" "runtime/trace" - "strings" "sync" "github.com/alcionai/clues" - "github.com/microsoft/kiota-abstractions-go/serialization" - msgraphgocore "github.com/microsoftgraph/msgraph-sdk-go-core" - "github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/pkg/errors" - "golang.org/x/exp/maps" "github.com/alcionai/corso/src/internal/common" - "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/discovery/api" "github.com/alcionai/corso/src/internal/connector/graph" - "github.com/alcionai/corso/src/internal/connector/sharepoint" "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/data" - "github.com/alcionai/corso/src/internal/diagnostics" "github.com/alcionai/corso/src/internal/operations/inject" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/fault" - "github.com/alcionai/corso/src/pkg/filters" ) // --------------------------------------------------------------------------- @@ -52,10 +42,7 @@ type GraphConnector struct { tenant string credentials account.M365Config - // TODO: remove in favor of the maps below. - Sites map[string]string // webURL -> siteID and siteID -> webURL - - // lookup for resource owner ids to names, and names to ids. + // maps of resource owner ids to names, and names to ids. // not guaranteed to be populated, only here as a post-population // reference for processes that choose to populate the values. IDNameLookup common.IDNameSwapper @@ -91,10 +78,11 @@ func NewGraphConnector( } gc := GraphConnector{ - itemClient: itemClient, - tenant: m365.AzureTenantID, - wg: &sync.WaitGroup{}, - credentials: m365, + itemClient: itemClient, + tenant: m365.AzureTenantID, + wg: &sync.WaitGroup{}, + credentials: m365, + IDNameLookup: common.IDsNames{}, } gc.Service, err = gc.createService() @@ -107,12 +95,6 @@ func NewGraphConnector( return nil, clues.Wrap(err, "creating api client").WithClues(ctx) } - if r == AllResources || r == Sites { - if err = gc.setTenantSites(ctx, errs); err != nil { - return nil, clues.Wrap(err, "retrieveing tenant site list") - } - } - return &gc, nil } @@ -186,114 +168,6 @@ func (gc *GraphConnector) createService() (*graph.Service, error) { return graph.NewService(adapter), nil } -// setTenantSites queries the M365 to identify the sites in the -// workspace. The sites field is updated during this method -// iff the returned error is nil. -func (gc *GraphConnector) setTenantSites(ctx context.Context, errs *fault.Bus) error { - gc.Sites = map[string]string{} - - ctx, end := diagnostics.Span(ctx, "gc:setTenantSites") - defer end() - - sites, err := getResources( - ctx, - gc.Service, - gc.tenant, - sharepoint.GetAllSitesForTenant, - models.CreateSiteCollectionResponseFromDiscriminatorValue, - identifySite, - errs) - if err != nil { - return err - } - - gc.Sites = sites - - return nil -} - -var errKnownSkippableCase = clues.New("case is known and skippable") - -const personalSitePath = "sharepoint.com/personal/" - -// Transforms an interface{} into a key,value pair representing -// siteName:siteID. -func identifySite(item any) (string, string, error) { - m, ok := item.(models.Siteable) - if !ok { - return "", "", clues.New("non-Siteable item").With("item_type", fmt.Sprintf("%T", item)) - } - - id := ptr.Val(m.GetId()) - url, ok := ptr.ValOK(m.GetWebUrl()) - - if m.GetName() == nil { - // the built-in site at "https://{tenant-domain}/search" never has a name. - if ok && strings.HasSuffix(url, "/search") { - return "", "", clues.Stack(errKnownSkippableCase).With("site_id", clues.Hide(id)) - } - - return "", "", clues.New("site has no name").With("site_id", clues.Hide(id)) - } - - // personal (ie: oneDrive) sites have to be filtered out server-side. - if ok && strings.Contains(url, personalSitePath) { - return "", "", clues.Stack(errKnownSkippableCase).With("site_id", clues.Hide(id)) - } - - return url, id, nil -} - -// GetSiteWebURLs returns the WebURLs of sharepoint sites within the tenant. -func (gc *GraphConnector) GetSiteWebURLs() []string { - return maps.Keys(gc.Sites) -} - -// GetSiteIds returns the canonical site IDs in the tenant -func (gc *GraphConnector) GetSiteIDs() []string { - return maps.Values(gc.Sites) -} - -// UnionSiteIDsAndWebURLs reduces the id and url slices into a single slice of site IDs. -// WebURLs will run as a path-suffix style matcher. Callers may provide partial urls, though -// each element in the url must fully match. Ex: the webURL value "foo" will match "www.ex.com/foo", -// but not match "www.ex.com/foobar". -// The returned IDs are reduced to a set of unique values. -func (gc *GraphConnector) UnionSiteIDsAndWebURLs( - ctx context.Context, - ids, urls []string, - errs *fault.Bus, -) ([]string, error) { - if len(gc.Sites) == 0 { - if err := gc.setTenantSites(ctx, errs); err != nil { - return nil, err - } - } - - idm := map[string]struct{}{} - - for _, id := range ids { - idm[id] = struct{}{} - } - - match := filters.PathSuffix(urls) - - for url, id := range gc.Sites { - if !match.Compare(url) { - continue - } - - idm[id] = struct{}{} - } - - idsl := make([]string, 0, len(idm)) - for id := range idm { - idsl = append(idsl, id) - } - - return idsl, nil -} - // AwaitStatus waits for all gc tasks to complete and then returns status func (gc *GraphConnector) Wait() *data.CollectionStats { defer func() { @@ -349,59 +223,3 @@ func (gc *GraphConnector) incrementAwaitingMessages() { func (gc *GraphConnector) incrementMessagesBy(num int) { gc.wg.Add(num) } - -// --------------------------------------------------------------------------- -// Helper Funcs -// --------------------------------------------------------------------------- - -func getResources( - ctx context.Context, - gs graph.Servicer, - tenantID string, - query func(context.Context, graph.Servicer) (serialization.Parsable, error), - parser func(parseNode serialization.ParseNode) (serialization.Parsable, error), - identify func(any) (string, string, error), - errs *fault.Bus, -) (map[string]string, error) { - resources := map[string]string{} - - response, err := query(ctx, gs) - if err != nil { - return nil, graph.Wrap(ctx, err, "retrieving tenant's resources") - } - - iter, err := msgraphgocore.NewPageIterator(response, gs.Adapter(), parser) - if err != nil { - return nil, graph.Stack(ctx, err) - } - - el := errs.Local() - - callbackFunc := func(item any) bool { - if el.Failure() != nil { - return false - } - - k, v, err := identify(item) - if err != nil { - if !errors.Is(err, errKnownSkippableCase) { - el.AddRecoverable(clues.Stack(err). - WithClues(ctx). - With("query_url", gs.Adapter().GetBaseUrl())) - } - - return true - } - - resources[k] = v - resources[v] = k - - return true - } - - if err := iter.Iterate(ctx, callbackFunc); err != nil { - return nil, graph.Stack(ctx, err) - } - - return resources, el.Failure() -} diff --git a/src/internal/connector/graph_connector_disconnected_test.go b/src/internal/connector/graph_connector_disconnected_test.go index 2d327246b..b95f75335 100644 --- a/src/internal/connector/graph_connector_disconnected_test.go +++ b/src/internal/connector/graph_connector_disconnected_test.go @@ -6,15 +6,10 @@ import ( "github.com/alcionai/clues" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/tester" - "github.com/alcionai/corso/src/pkg/account" - "github.com/alcionai/corso/src/pkg/credentials" - "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/selectors" ) @@ -33,57 +28,6 @@ func TestDisconnectedGraphSuite(t *testing.T) { suite.Run(t, s) } -func (suite *DisconnectedGraphConnectorSuite) TestBadConnection() { - ctx, flush := tester.NewContext() - defer flush() - - table := []struct { - name string - acct func(t *testing.T) account.Account - }{ - { - name: "Invalid Credentials", - acct: func(t *testing.T) account.Account { - a, err := account.NewAccount( - account.ProviderM365, - account.M365Config{ - M365: credentials.M365{ - AzureClientID: "Test", - AzureClientSecret: "without", - }, - AzureTenantID: "data", - }, - ) - require.NoError(t, err, clues.ToCore(err)) - return a - }, - }, - { - name: "Empty Credentials", - acct: func(t *testing.T) account.Account { - // intentionally swallowing the error here - a, _ := account.NewAccount(account.ProviderM365) - return a - }, - }, - } - - for _, test := range table { - suite.Run(test.name, func() { - t := suite.T() - - gc, err := NewGraphConnector( - ctx, - graph.HTTPClient(graph.NoTimeout()), - test.acct(t), - Sites, - fault.New(true)) - assert.Nil(t, gc, test.name+" failed") - assert.NotNil(t, err, test.name+" failed") - }) - } -} - func statusTestTask(gc *GraphConnector, objects, success, folder int) { ctx, flush := tester.NewContext() defer flush() diff --git a/src/internal/connector/graph_connector_test.go b/src/internal/connector/graph_connector_test.go index c704fc209..2b4525bc0 100644 --- a/src/internal/connector/graph_connector_test.go +++ b/src/internal/connector/graph_connector_test.go @@ -39,103 +39,6 @@ func TestGraphConnectorUnitSuite(t *testing.T) { suite.Run(t, &GraphConnectorUnitSuite{Suite: tester.NewUnitSuite(t)}) } -func (suite *GraphConnectorUnitSuite) TestUnionSiteIDsAndWebURLs() { - const ( - url1 = "www.foo.com/bar" - url2 = "www.fnords.com/smarf" - path1 = "bar" - path2 = "/smarf" - id1 = "site-id-1" - id2 = "site-id-2" - ) - - gc := &GraphConnector{ - // must be populated, else the func will try to make a graph call - // to retrieve site data. - Sites: map[string]string{ - url1: id1, - url2: id2, - }, - } - - table := []struct { - name string - ids []string - urls []string - expect []string - }{ - { - name: "nil", - }, - { - name: "empty", - ids: []string{}, - urls: []string{}, - expect: []string{}, - }, - { - name: "ids only", - ids: []string{id1, id2}, - urls: []string{}, - expect: []string{id1, id2}, - }, - { - name: "urls only", - ids: []string{}, - urls: []string{url1, url2}, - expect: []string{id1, id2}, - }, - { - name: "url suffix only", - ids: []string{}, - urls: []string{path1, path2}, - expect: []string{id1, id2}, - }, - { - name: "url and suffix overlap", - ids: []string{}, - urls: []string{url1, url2, path1, path2}, - expect: []string{id1, id2}, - }, - { - name: "ids and urls, no overlap", - ids: []string{id1}, - urls: []string{url2}, - expect: []string{id1, id2}, - }, - { - name: "ids and urls, overlap", - ids: []string{id1, id2}, - urls: []string{url1, url2}, - expect: []string{id1, id2}, - }, - { - name: "partial non-match on path", - ids: []string{}, - urls: []string{path1[2:], path2[2:]}, - expect: []string{}, - }, - { - name: "partial non-match on url", - ids: []string{}, - urls: []string{url1[5:], url2[5:]}, - expect: []string{}, - }, - } - for _, test := range table { - suite.Run(test.name, func() { - ctx, flush := tester.NewContext() - defer flush() - - t := suite.T() - - result, err := gc.UnionSiteIDsAndWebURLs(ctx, test.ids, test.urls, fault.New(true)) - assert.NoError(t, err, clues.ToCore(err)) - assert.ElementsMatch(t, test.expect, result) - }) - } -} - func (suite *GraphConnectorUnitSuite) TestPopulateOwnerIDAndNamesFrom() { const ( ownerID = "owner-id" @@ -320,35 +223,6 @@ func (suite *GraphConnectorIntegrationSuite) SetupSuite() { tester.LogTimeOfTest(suite.T()) } -// TestSetTenantSites verifies GraphConnector's ability to query -// the sites associated with the credentials -func (suite *GraphConnectorIntegrationSuite) TestSetTenantSites() { - newConnector := GraphConnector{ - tenant: "test_tenant", - Sites: make(map[string]string, 0), - credentials: suite.connector.credentials, - } - - ctx, flush := tester.NewContext() - defer flush() - - t := suite.T() - - service, err := newConnector.createService() - require.NoError(t, err, clues.ToCore(err)) - - newConnector.Service = service - assert.Equal(t, 0, len(newConnector.Sites)) - - err = newConnector.setTenantSites(ctx, fault.New(true)) - assert.NoError(t, err, clues.ToCore(err)) - assert.Less(t, 0, len(newConnector.Sites)) - - for _, site := range newConnector.Sites { - assert.NotContains(t, "sharepoint.com/personal/", site) - } -} - func (suite *GraphConnectorIntegrationSuite) TestRestoreFailsBadService() { ctx, flush := tester.NewContext() defer flush() @@ -564,16 +438,26 @@ func runBackupAndCompare( cats[c.category] = struct{}{} } - expectedDests := make([]destAndCats, 0, len(config.resourceOwners)) + var ( + expectedDests = make([]destAndCats, 0, len(config.resourceOwners)) + idToName = map[string]string{} + nameToID = map[string]string{} + ) + for _, ro := range config.resourceOwners { expectedDests = append(expectedDests, destAndCats{ resourceOwner: ro, dest: config.dest.ContainerName, cats: cats, }) + + idToName[ro] = ro + nameToID[ro] = ro } backupGC := loadConnector(ctx, t, graph.HTTPClient(graph.NoTimeout()), config.resource) + backupGC.IDNameLookup = common.IDsNames{IDToName: idToName, NameToID: nameToID} + backupSel := backupSelectorForExpected(t, config.service, expectedDests) t.Logf("Selective backup of %s\n", backupSel) @@ -1271,6 +1155,11 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections start = time.Now() ) + id, name, err := backupGC.PopulateOwnerIDAndNamesFrom(backupSel.DiscreteOwner, nil) + require.NoError(t, err, clues.ToCore(err)) + + backupSel.SetDiscreteOwnerIDName(id, name) + dcs, excludes, err := backupGC.ProduceBackupCollections( ctx, backupSel, diff --git a/src/internal/operations/backup_integration_test.go b/src/internal/operations/backup_integration_test.go index 3ec53b3c1..a88641ae1 100644 --- a/src/internal/operations/backup_integration_test.go +++ b/src/internal/operations/backup_integration_test.go @@ -123,6 +123,11 @@ func prepNewTestBackupOp( t.FailNow() } + id, name, err := gc.PopulateOwnerIDAndNamesFrom(sel.DiscreteOwner, nil) + require.NoError(t, err, clues.ToCore(err)) + + sel.SetDiscreteOwnerIDName(id, name) + bo := newTestBackupOp(t, ctx, kw, ms, gc, acct, sel, bus, featureToggles, closer) return bo, acct, kw, ms, gc, closer diff --git a/src/internal/operations/restore_test.go b/src/internal/operations/restore_test.go index adc0fe55e..649bbe140 100644 --- a/src/internal/operations/restore_test.go +++ b/src/internal/operations/restore_test.go @@ -278,6 +278,9 @@ func setupExchangeBackup( fault.New(true)) require.NoError(t, err, clues.ToCore(err)) + id, name, err := gc.PopulateOwnerIDAndNamesFrom(owner, nil) + require.NoError(t, err, clues.ToCore(err)) + bsel.DiscreteOwner = owner bsel.Include( bsel.MailFolders([]string{exchange.DefaultMailFolder}, selectors.PrefixMatch()), @@ -285,6 +288,8 @@ func setupExchangeBackup( bsel.EventCalendars([]string{exchange.DefaultCalendar}, selectors.PrefixMatch()), ) + bsel.SetDiscreteOwnerIDName(id, name) + bo, err := NewBackupOperation( ctx, control.Options{}, @@ -335,6 +340,9 @@ func setupSharePointBackup( fault.New(true)) require.NoError(t, err, clues.ToCore(err)) + id, name, err := gc.PopulateOwnerIDAndNamesFrom(owner, nil) + require.NoError(t, err, clues.ToCore(err)) + spsel.DiscreteOwner = owner // assume a folder name "test" exists in the drive. // this is brittle, and requires us to backfill anytime @@ -342,6 +350,8 @@ func setupSharePointBackup( // growth from re-backup/restore of restored files. spsel.Include(spsel.LibraryFolders([]string{"test"}, selectors.PrefixMatch())) + spsel.SetDiscreteOwnerIDName(id, name) + bo, err := NewBackupOperation( ctx, control.Options{}, diff --git a/src/pkg/services/m365/m365.go b/src/pkg/services/m365/m365.go index e5dc658a4..b2b8371cd 100644 --- a/src/pkg/services/m365/m365.go +++ b/src/pkg/services/m365/m365.go @@ -9,9 +9,7 @@ import ( "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/ptr" - "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/discovery" - "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/fault" ) @@ -58,6 +56,22 @@ func Users(ctx context.Context, acct account.Account, errs *fault.Bus) ([]*User, return ret, nil } +// parseUser extracts information from `models.Userable` we care about +func parseUser(item models.Userable) (*User, error) { + if item.GetUserPrincipalName() == nil { + return nil, clues.New("user missing principal name"). + With("user_id", *item.GetId()) // TODO: pii + } + + u := &User{ + PrincipalName: ptr.Val(item.GetUserPrincipalName()), + ID: ptr.Val(item.GetId()), + Name: ptr.Val(item.GetDisplayName()), + } + + return u, nil +} + // UsersMap retrieves all users in the tenant, and returns two maps: one id-to-principalName, // and one principalName-to-id. func UsersMap( @@ -96,59 +110,66 @@ type Site struct { // ID is of the format: .. // for example: contoso.sharepoint.com,abcdeab3-0ccc-4ce1-80ae-b32912c9468d,xyzud296-9f7c-44e1-af81-3c06d0d43007 ID string + + // DisplayName is the human-readable name of the site. Normally the plaintext name that the + // user provided when they created the site, though it can be changed across time. + // Ex: webUrl: https://host.com/sites/TestingSite, displayName: "Testing Site" + DisplayName string } // Sites returns a list of Sites in a specified M365 tenant func Sites(ctx context.Context, acct account.Account, errs *fault.Bus) ([]*Site, error) { - gc, err := connector.NewGraphConnector(ctx, graph.HTTPClient(graph.NoTimeout()), acct, connector.Sites, errs) + sites, err := discovery.Sites(ctx, acct, errs) if err != nil { return nil, clues.Wrap(err, "initializing M365 graph connection") } - // gc.Sites is a map with keys: SiteURL, values: ID - ret := make([]*Site, 0, len(gc.Sites)) - for k, v := range gc.Sites { - ret = append(ret, &Site{ - WebURL: k, - ID: v, - }) + ret := make([]*Site, 0, len(sites)) + + for _, s := range sites { + ps, err := parseSite(s) + if err != nil { + return nil, clues.Wrap(err, "parsing siteable") + } + + ret = append(ret, ps) } return ret, nil } -// SiteURLs returns a list of SharePoint site WebURLs in the specified M365 tenant -func SiteURLs(ctx context.Context, acct account.Account, errs *fault.Bus) ([]string, error) { - gc, err := connector.NewGraphConnector(ctx, graph.HTTPClient(graph.NoTimeout()), acct, connector.Sites, errs) +// parseSite extracts the information from `models.Siteable` we care about +func parseSite(item models.Siteable) (*Site, error) { + s := &Site{ + ID: ptr.Val(item.GetId()), + WebURL: ptr.Val(item.GetWebUrl()), + DisplayName: ptr.Val(item.GetDisplayName()), + } + + return s, nil +} + +// SitesMap retrieves all sites in the tenant, and returns two maps: one id-to-webURL, +// and one webURL-to-id. +func SitesMap( + ctx context.Context, + acct account.Account, + errs *fault.Bus, +) (common.IDsNames, error) { + sites, err := Sites(ctx, acct, errs) if err != nil { - return nil, clues.Wrap(err, "initializing M365 graph connection") + return common.IDsNames{}, err } - return gc.GetSiteWebURLs(), nil -} - -// SiteIDs returns a list of SharePoint sites IDs in the specified M365 tenant -func SiteIDs(ctx context.Context, acct account.Account, errs *fault.Bus) ([]string, error) { - gc, err := connector.NewGraphConnector(ctx, graph.HTTPClient(graph.NoTimeout()), acct, connector.Sites, errs) - if err != nil { - return nil, clues.Wrap(err, "initializing graph connection") - } - - return gc.GetSiteIDs(), nil -} - -// parseUser extracts information from `models.Userable` we care about -func parseUser(item models.Userable) (*User, error) { - if item.GetUserPrincipalName() == nil { - return nil, clues.New("user missing principal name"). - With("user_id", clues.Hide(ptr.Val(item.GetId()))) - } - - u := &User{PrincipalName: *item.GetUserPrincipalName(), ID: *item.GetId()} - - if item.GetDisplayName() != nil { - u.Name = *item.GetDisplayName() - } - - return u, nil + ins := common.IDsNames{ + IDToName: make(map[string]string, len(sites)), + NameToID: make(map[string]string, len(sites)), + } + + for _, s := range sites { + ins.IDToName[s.ID] = s.WebURL + ins.NameToID[s.WebURL] = s.ID + } + + return ins, nil } diff --git a/src/pkg/services/m365/m365_test.go b/src/pkg/services/m365/m365_test.go index b22f0a37b..9137bb066 100644 --- a/src/pkg/services/m365/m365_test.go +++ b/src/pkg/services/m365/m365_test.go @@ -66,6 +66,7 @@ func (suite *M365IntegrationSuite) TestSites() { t := suite.T() assert.NotEmpty(t, s.WebURL) assert.NotEmpty(t, s.ID) + assert.NotEmpty(t, s.DisplayName) }) } } From 7b8a00efc23d9279684816597b9d50fd54bc6854 Mon Sep 17 00:00:00 2001 From: Keepers Date: Wed, 5 Apr 2023 14:30:46 -0600 Subject: [PATCH 33/37] extend, rather than replace, NewBackup (#3045) --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature #### Issue(s) * #2825 #### Test Plan - [x] :muscle: Manual --- src/cli/backup/backup.go | 2 +- src/cli/backup/exchange_e2e_test.go | 4 ++-- src/cli/backup/onedrive_e2e_test.go | 2 +- src/cli/backup/sharepoint_e2e_test.go | 2 +- src/cli/restore/exchange_e2e_test.go | 2 +- .../repository/loadtest/repository_load_test.go | 2 +- src/pkg/repository/repository.go | 14 +++++++++++++- src/pkg/repository/repository_test.go | 2 +- 8 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/cli/backup/backup.go b/src/cli/backup/backup.go index 9e1d4bda2..c55e49792 100644 --- a/src/cli/backup/backup.go +++ b/src/cli/backup/backup.go @@ -208,7 +208,7 @@ func runBackups( ictx = clues.Add(ctx, "resource_owner", owner) ) - bo, err := r.NewBackup(ictx, discSel, ins) + bo, err := r.NewBackupWithLookup(ictx, discSel, ins) if err != nil { errs = append(errs, clues.Wrap(err, owner).WithClues(ictx)) Errf(ictx, "%v\n", err) diff --git a/src/cli/backup/exchange_e2e_test.go b/src/cli/backup/exchange_e2e_test.go index a03f65e05..96fa0ce35 100644 --- a/src/cli/backup/exchange_e2e_test.go +++ b/src/cli/backup/exchange_e2e_test.go @@ -330,7 +330,7 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { sel.Include(scopes) - bop, err := suite.repo.NewBackup(ctx, sel.Selector, ins) + bop, err := suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = bop.Run(ctx) @@ -555,7 +555,7 @@ func (suite *BackupDeleteExchangeE2ESuite) SetupSuite() { sel := selectors.NewExchangeBackup(users) sel.Include(sel.MailFolders([]string{exchange.DefaultMailFolder}, selectors.PrefixMatch())) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector, nil) + suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector) require.NoError(t, err, clues.ToCore(err)) err = suite.backupOp.Run(ctx) diff --git a/src/cli/backup/onedrive_e2e_test.go b/src/cli/backup/onedrive_e2e_test.go index f73532ff4..19555e91a 100644 --- a/src/cli/backup/onedrive_e2e_test.go +++ b/src/cli/backup/onedrive_e2e_test.go @@ -221,7 +221,7 @@ func (suite *BackupDeleteOneDriveE2ESuite) SetupSuite() { sel := selectors.NewOneDriveBackup(users) sel.Include(sel.Folders(selectors.Any())) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector, ins) + suite.backupOp, err = suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = suite.backupOp.Run(ctx) diff --git a/src/cli/backup/sharepoint_e2e_test.go b/src/cli/backup/sharepoint_e2e_test.go index f8b577024..42116760d 100644 --- a/src/cli/backup/sharepoint_e2e_test.go +++ b/src/cli/backup/sharepoint_e2e_test.go @@ -173,7 +173,7 @@ func (suite *BackupDeleteSharePointE2ESuite) SetupSuite() { sel := selectors.NewSharePointBackup(sites) sel.Include(testdata.SharePointBackupFolderScope(sel)) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector, ins) + suite.backupOp, err = suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = suite.backupOp.Run(ctx) diff --git a/src/cli/restore/exchange_e2e_test.go b/src/cli/restore/exchange_e2e_test.go index 03a783e62..23fb7dc9d 100644 --- a/src/cli/restore/exchange_e2e_test.go +++ b/src/cli/restore/exchange_e2e_test.go @@ -110,7 +110,7 @@ func (suite *RestoreExchangeE2ESuite) SetupSuite() { sel.Include(scopes) - bop, err := suite.repo.NewBackup(ctx, sel.Selector, ins) + bop, err := suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) err = bop.Run(ctx) diff --git a/src/pkg/repository/loadtest/repository_load_test.go b/src/pkg/repository/loadtest/repository_load_test.go index 5d7a597a2..226b6e15d 100644 --- a/src/pkg/repository/loadtest/repository_load_test.go +++ b/src/pkg/repository/loadtest/repository_load_test.go @@ -120,7 +120,7 @@ func runLoadTest( ) { //revive:enable:context-as-argument t.Run(prefix+"_load_test_main", func(t *testing.T) { - b, err := r.NewBackup(ctx, bupSel, nil) + b, err := r.NewBackup(ctx, bupSel) require.NoError(t, err, clues.ToCore(err)) runBackupLoadTest(t, ctx, &b, service, usersUnderTest) diff --git a/src/pkg/repository/repository.go b/src/pkg/repository/repository.go index 63bde62a8..80686368d 100644 --- a/src/pkg/repository/repository.go +++ b/src/pkg/repository/repository.go @@ -59,6 +59,10 @@ type Repository interface { NewBackup( ctx context.Context, self selectors.Selector, + ) (operations.BackupOperation, error) + NewBackupWithLookup( + ctx context.Context, + self selectors.Selector, ins common.IDNameSwapper, ) (operations.BackupOperation, error) NewRestore( @@ -289,9 +293,17 @@ func (r *repository) Close(ctx context.Context) error { } // NewBackup generates a BackupOperation runner. +func (r repository) NewBackup( + ctx context.Context, + sel selectors.Selector, +) (operations.BackupOperation, error) { + return r.NewBackupWithLookup(ctx, sel, nil) +} + +// NewBackupWithLookup generates a BackupOperation runner. // ownerIDToName and ownerNameToID are optional populations, in case the caller has // already generated those values. -func (r repository) NewBackup( +func (r repository) NewBackupWithLookup( ctx context.Context, sel selectors.Selector, ins common.IDNameSwapper, diff --git a/src/pkg/repository/repository_test.go b/src/pkg/repository/repository_test.go index 14871731d..cdea26d27 100644 --- a/src/pkg/repository/repository_test.go +++ b/src/pkg/repository/repository_test.go @@ -198,7 +198,7 @@ func (suite *RepositoryIntegrationSuite) TestNewBackup() { r, err := repository.Initialize(ctx, acct, st, control.Options{}) require.NoError(t, err, clues.ToCore(err)) - bo, err := r.NewBackup(ctx, selectors.Selector{DiscreteOwner: "test"}, nil) + bo, err := r.NewBackup(ctx, selectors.Selector{DiscreteOwner: "test"}) require.NoError(t, err, clues.ToCore(err)) require.NotNil(t, bo) } From 59e17757bf7da0b637a74f17a21ec5477bc30585 Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Wed, 5 Apr 2023 14:10:42 -0700 Subject: [PATCH 34/37] Switch LocationPath return type (#3038) LocationRefs don't need prefix directories, so using a path.Path is overkill. This will also fit better with changes to come where we need to parse and update the LocationRef of merged backup details entries. --- #### 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: Supportability/Tests - [ ] :computer: CI/Deployment - [x] :broom: Tech Debt/Cleanup #### Issue(s) * #2486 #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- .../exchange/exchange_data_collection.go | 9 ++- .../exchange/exchange_data_collection_test.go | 12 +-- .../connector/exchange/service_functions.go | 4 +- src/internal/data/data_collection.go | 2 +- src/internal/kopia/upload.go | 21 ++---- src/internal/kopia/upload_test.go | 6 +- src/internal/kopia/wrapper.go | 2 +- src/internal/operations/backup.go | 6 +- src/internal/operations/backup_test.go | 74 ++++--------------- src/pkg/backup/details/details.go | 12 +-- src/pkg/backup/details/details_test.go | 28 +++---- 11 files changed, 58 insertions(+), 118 deletions(-) diff --git a/src/internal/connector/exchange/exchange_data_collection.go b/src/internal/connector/exchange/exchange_data_collection.go index 66d891b28..2f8f9d4f2 100644 --- a/src/internal/connector/exchange/exchange_data_collection.go +++ b/src/internal/connector/exchange/exchange_data_collection.go @@ -82,7 +82,7 @@ type Collection struct { // LocationPath contains the path with human-readable display names. // IE: "/Inbox/Important" instead of "/abcdxyz123/algha=lgkhal=t" - locationPath path.Path + locationPath *path.Builder state data.CollectionState @@ -98,7 +98,8 @@ type Collection struct { // or notMoved (if they match). func NewCollection( user string, - curr, prev, location path.Path, + curr, prev path.Path, + location *path.Builder, category path.CategoryType, items itemer, statusUpdater support.StatusUpdater, @@ -138,7 +139,7 @@ func (col *Collection) FullPath() path.Path { // LocationPath produces the Collection's full path, but with display names // instead of IDs in the folders. Only populated for Calendars. -func (col *Collection) LocationPath() path.Path { +func (col *Collection) LocationPath() *path.Builder { return col.locationPath } @@ -278,7 +279,7 @@ func (col *Collection) streamItems(ctx context.Context, errs *fault.Bus) { } info.Size = int64(len(data)) - info.ParentPath = col.locationPath.Folder(true) + info.ParentPath = col.locationPath.String() col.data <- &Stream{ id: id, diff --git a/src/internal/connector/exchange/exchange_data_collection_test.go b/src/internal/connector/exchange/exchange_data_collection_test.go index 2abb08bb6..d78911b92 100644 --- a/src/internal/connector/exchange/exchange_data_collection_test.go +++ b/src/internal/connector/exchange/exchange_data_collection_test.go @@ -133,34 +133,34 @@ func (suite *ExchangeDataCollectionSuite) TestNewCollection_state() { require.NoError(suite.T(), err, clues.ToCore(err)) barP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "bar") require.NoError(suite.T(), err, clues.ToCore(err)) - locP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "human-readable") - require.NoError(suite.T(), err, clues.ToCore(err)) + + locPB := path.Builder{}.Append("human-readable") table := []struct { name string prev path.Path curr path.Path - loc path.Path + loc *path.Builder expect data.CollectionState }{ { name: "new", curr: fooP, - loc: locP, + loc: locPB, expect: data.NewState, }, { name: "not moved", prev: fooP, curr: fooP, - loc: locP, + loc: locPB, expect: data.NotMovedState, }, { name: "moved", prev: fooP, curr: barP, - loc: locP, + loc: locPB, expect: data.MovedState, }, { diff --git a/src/internal/connector/exchange/service_functions.go b/src/internal/connector/exchange/service_functions.go index 0827fbb05..5fd1a0845 100644 --- a/src/internal/connector/exchange/service_functions.go +++ b/src/internal/connector/exchange/service_functions.go @@ -95,7 +95,7 @@ func includeContainer( qp graph.QueryParams, c graph.CachedContainer, scope selectors.ExchangeScope, -) (path.Path, path.Path, bool) { +) (path.Path, *path.Builder, bool) { var ( directory string locPath path.Path @@ -154,5 +154,5 @@ func includeContainer( return nil, nil, false } - return pathRes, locPath, ok + return pathRes, loc, ok } diff --git a/src/internal/data/data_collection.go b/src/internal/data/data_collection.go index 23f402083..d0dc1cd07 100644 --- a/src/internal/data/data_collection.go +++ b/src/internal/data/data_collection.go @@ -101,7 +101,7 @@ type Stream interface { // LocationPather provides a LocationPath describing the path with Display Names // instead of canonical IDs type LocationPather interface { - LocationPath() path.Path + LocationPath() *path.Builder } // StreamInfo is used to provide service specific diff --git a/src/internal/kopia/upload.go b/src/internal/kopia/upload.go index b0a363727..08859b4ee 100644 --- a/src/internal/kopia/upload.go +++ b/src/internal/kopia/upload.go @@ -127,7 +127,7 @@ type itemDetails struct { info *details.ItemInfo repoPath path.Path prevPath path.Path - locationPath path.Path + locationPath *path.Builder cached bool } @@ -205,20 +205,11 @@ func (cp *corsoProgress) FinishedFile(relativePath string, err error) { var ( locationFolders string - locPB *path.Builder parent = d.repoPath.ToBuilder().Dir() ) if d.locationPath != nil { - locationFolders = d.locationPath.Folder(true) - - locPB = d.locationPath.ToBuilder() - - // folderEntriesForPath assumes the location will - // not have an item element appended - if len(d.locationPath.Item()) > 0 { - locPB = locPB.Dir() - } + locationFolders = d.locationPath.String() } err = cp.deets.Add( @@ -239,7 +230,7 @@ func (cp *corsoProgress) FinishedFile(relativePath string, err error) { return } - folders := details.FolderEntriesForPath(parent, locPB) + folders := details.FolderEntriesForPath(parent, d.locationPath) cp.deets.AddFoldersForItem( folders, *d.info, @@ -328,7 +319,7 @@ func collectionEntries( } var ( - locationPath path.Path + locationPath *path.Builder // Track which items have already been seen so we can skip them if we see // them again in the data from the base snapshot. seen = map[string]struct{}{} @@ -431,7 +422,7 @@ func streamBaseEntries( cb func(context.Context, fs.Entry) error, curPath path.Path, prevPath path.Path, - locationPath path.Path, + locationPath *path.Builder, dir fs.Directory, encodedSeen map[string]struct{}, globalExcludeSet map[string]map[string]struct{}, @@ -556,7 +547,7 @@ func getStreamItemFunc( } } - var locationPath path.Path + var locationPath *path.Builder if lp, ok := streamedEnts.(data.LocationPather); ok { locationPath = lp.LocationPath() diff --git a/src/internal/kopia/upload_test.go b/src/internal/kopia/upload_test.go index 4c78df606..30f722e2b 100644 --- a/src/internal/kopia/upload_test.go +++ b/src/internal/kopia/upload_test.go @@ -345,6 +345,7 @@ func (suite *VersionReadersUnitSuite) TestWriteHandlesShortReads() { type CorsoProgressUnitSuite struct { tester.Suite targetFilePath path.Path + targetFileLoc *path.Builder targetFileName string } @@ -363,6 +364,7 @@ func (suite *CorsoProgressUnitSuite) SetupSuite() { require.NoError(suite.T(), err, clues.ToCore(err)) suite.targetFilePath = p + suite.targetFileLoc = path.Builder{}.Append(testInboxDir) suite.targetFileName = suite.targetFilePath.ToBuilder().Dir().String() } @@ -596,7 +598,7 @@ func (suite *CorsoProgressUnitSuite) TestFinishedFileBaseItemDoesntBuildHierarch expectedToMerge := map[string]PrevRefs{ prevPath.ShortRef(): { Repo: suite.targetFilePath, - Location: suite.targetFilePath, + Location: suite.targetFileLoc, }, } @@ -614,7 +616,7 @@ func (suite *CorsoProgressUnitSuite) TestFinishedFileBaseItemDoesntBuildHierarch info: nil, repoPath: suite.targetFilePath, prevPath: prevPath, - locationPath: suite.targetFilePath, + locationPath: suite.targetFileLoc, } cp.put(suite.targetFileName, deets) diff --git a/src/internal/kopia/wrapper.go b/src/internal/kopia/wrapper.go index eff16e31a..ba6bb38a5 100644 --- a/src/internal/kopia/wrapper.go +++ b/src/internal/kopia/wrapper.go @@ -128,7 +128,7 @@ type IncrementalBase struct { // that need to be merged in from prior snapshots. type PrevRefs struct { Repo path.Path - Location path.Path + Location *path.Builder } // ConsumeBackupCollections takes a set of collections and creates a kopia snapshot diff --git a/src/internal/operations/backup.go b/src/internal/operations/backup.go index 08de9678a..1c59b75dd 100644 --- a/src/internal/operations/backup.go +++ b/src/internal/operations/backup.go @@ -583,12 +583,10 @@ func mergeDetails( var ( itemUpdated = newPath.String() != rr.String() newLocStr string - locBuilder *path.Builder ) if newLoc != nil { - locBuilder = newLoc.ToBuilder() - newLocStr = newLoc.Folder(true) + newLocStr = newLoc.String() itemUpdated = itemUpdated || newLocStr != entry.LocationRef } @@ -603,7 +601,7 @@ func mergeDetails( return clues.Wrap(err, "adding item to details") } - folders := details.FolderEntriesForPath(newPath.ToBuilder().Dir(), locBuilder) + folders := details.FolderEntriesForPath(newPath.ToBuilder().Dir(), newLoc) deets.AddFoldersForItem(folders, item, itemUpdated) // Track how many entries we added so that we know if we got them all when diff --git a/src/internal/operations/backup_test.go b/src/internal/operations/backup_test.go index 8a519c456..a1f68c2a3 100644 --- a/src/internal/operations/backup_test.go +++ b/src/internal/operations/backup_test.go @@ -265,7 +265,7 @@ func makePath(t *testing.T, elements []string, isItem bool) path.Path { func makeDetailsEntry( t *testing.T, p path.Path, - l path.Path, + l *path.Builder, size int, updated bool, ) *details.DetailsEntry { @@ -273,7 +273,7 @@ func makeDetailsEntry( var lr string if l != nil { - lr = l.PopFront().PopFront().PopFront().PopFront().Dir().String() + lr = l.String() } res := &details.DetailsEntry{ @@ -298,7 +298,7 @@ func makeDetailsEntry( res.Exchange = &details.ExchangeInfo{ ItemType: details.ExchangeMail, Size: int64(size), - ParentPath: l.Folder(false), + ParentPath: l.String(), } case path.OneDriveService: @@ -608,22 +608,8 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems }, true, ) - locationPath1 = makePath( - suite.T(), - []string{ - tenant, - path.OneDriveService.String(), - ro, - path.FilesCategory.String(), - "drives", - "drive-id", - "root:", - "work-display-name", - "item1", - }, - true, - ) - itemPath2 = makePath( + locationPath1 = path.Builder{}.Append("root:", "work-display-name") + itemPath2 = makePath( suite.T(), []string{ tenant, @@ -638,22 +624,8 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems }, true, ) - locationPath2 = makePath( - suite.T(), - []string{ - tenant, - path.OneDriveService.String(), - ro, - path.FilesCategory.String(), - "drives", - "drive-id", - "root:", - "personal-display-name", - "item2", - }, - true, - ) - itemPath3 = makePath( + locationPath2 = path.Builder{}.Append("root:", "personal-display-name") + itemPath3 = makePath( suite.T(), []string{ tenant, @@ -665,18 +637,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems }, true, ) - locationPath3 = makePath( - suite.T(), - []string{ - tenant, - path.ExchangeService.String(), - ro, - path.EmailCategory.String(), - "personal-display-name", - "item3", - }, - true, - ) + locationPath3 = path.Builder{}.Append("personal-display-name") backup1 = backup.Backup{ BaseModel: model.BaseModel{ @@ -801,7 +762,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems backup1.DetailsID: { DetailsModel: details.DetailsModel{ Entries: []details.DetailsEntry{ - *makeDetailsEntry(suite.T(), itemPath1, itemPath1, 42, false), + *makeDetailsEntry(suite.T(), itemPath1, locationPath1, 42, false), }, }, }, @@ -837,7 +798,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems backup1.DetailsID: { DetailsModel: details.DetailsModel{ Entries: []details.DetailsEntry{ - *makeDetailsEntry(suite.T(), itemPath1, itemPath1, 42, false), + *makeDetailsEntry(suite.T(), itemPath1, locationPath1, 42, false), }, }, }, @@ -926,7 +887,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems backup1.DetailsID: { DetailsModel: details.DetailsModel{ Entries: []details.DetailsEntry{ - *makeDetailsEntry(suite.T(), itemPath1, itemPath1, 42, false), + *makeDetailsEntry(suite.T(), itemPath1, locationPath1, 42, false), }, }, }, @@ -1003,7 +964,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems inputShortRefsFromPrevBackup: map[string]kopia.PrevRefs{ itemPath1.ShortRef(): { Repo: itemPath1, - Location: itemPath1, + Location: locationPath1, }, }, inputMans: []*kopia.ManifestEntry{ @@ -1021,14 +982,14 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsItems backup1.DetailsID: { DetailsModel: details.DetailsModel{ Entries: []details.DetailsEntry{ - *makeDetailsEntry(suite.T(), itemPath1, itemPath1, 42, false), + *makeDetailsEntry(suite.T(), itemPath1, locationPath1, 42, false), }, }, }, }, errCheck: assert.NoError, expectedEntries: []*details.DetailsEntry{ - makeDetailsEntry(suite.T(), itemPath1, itemPath1, 42, false), + makeDetailsEntry(suite.T(), itemPath1, locationPath1, 42, false), }, }, { @@ -1254,10 +1215,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsFolde pathElems, true) - locPath1 = makePath( - t, - pathElems[:len(pathElems)-1], - false) + locPath1 = path.Builder{}.Append(pathElems[:len(pathElems)-1]...) backup1 = backup.Backup{ BaseModel: model.BaseModel{ @@ -1297,7 +1255,7 @@ func (suite *BackupOpUnitSuite) TestBackupOperation_MergeBackupDetails_AddsFolde // later = now.Add(42 * time.Minute) ) - itemDetails := makeDetailsEntry(t, itemPath1, itemPath1, itemSize, false) + itemDetails := makeDetailsEntry(t, itemPath1, locPath1, itemSize, false) // itemDetails.Exchange.Modified = now populatedDetails := map[string]*details.Details{ diff --git a/src/pkg/backup/details/details.go b/src/pkg/backup/details/details.go index 1af96edcf..6c8efbdfa 100644 --- a/src/pkg/backup/details/details.go +++ b/src/pkg/backup/details/details.go @@ -468,10 +468,10 @@ const ( FolderItem ItemType = 306 ) -func UpdateItem(item *ItemInfo, repoPath, locPath path.Path) error { +func UpdateItem(item *ItemInfo, repoPath path.Path, locPath *path.Builder) error { // Only OneDrive and SharePoint have information about parent folders // contained in them. - var updatePath func(repo path.Path, location path.Path) error + var updatePath func(repo path.Path, location *path.Builder) error switch item.infoType() { case ExchangeContact, ExchangeEvent, ExchangeMail: @@ -632,13 +632,13 @@ func (i ExchangeInfo) Values() []string { return []string{} } -func (i *ExchangeInfo) UpdateParentPath(_, locPath path.Path) error { +func (i *ExchangeInfo) UpdateParentPath(_ path.Path, locPath *path.Builder) error { // Not all data types have this set yet. if locPath == nil { return nil } - i.ParentPath = locPath.Folder(true) + i.ParentPath = locPath.String() return nil } @@ -677,7 +677,7 @@ func (i SharePointInfo) Values() []string { } } -func (i *SharePointInfo) UpdateParentPath(newPath, _ path.Path) error { +func (i *SharePointInfo) UpdateParentPath(newPath path.Path, _ *path.Builder) error { newParent, err := path.GetDriveFolderPath(newPath) if err != nil { return clues.Wrap(err, "making sharePoint path").With("path", newPath) @@ -721,7 +721,7 @@ func (i OneDriveInfo) Values() []string { } } -func (i *OneDriveInfo) UpdateParentPath(newPath, _ path.Path) error { +func (i *OneDriveInfo) UpdateParentPath(newPath path.Path, _ *path.Builder) error { newParent, err := path.GetDriveFolderPath(newPath) if err != nil { return clues.Wrap(err, "making oneDrive path").With("path", newPath) diff --git a/src/pkg/backup/details/details_test.go b/src/pkg/backup/details/details_test.go index 633fc0fdf..b268e39b8 100644 --- a/src/pkg/backup/details/details_test.go +++ b/src/pkg/backup/details/details_test.go @@ -880,17 +880,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { item, }, ) - newExchangePath := makeItemPath( - suite.T(), - path.ExchangeService, - path.EmailCategory, - tenant, - resourceOwner, - []string{ - folder3, - item, - }, - ) + newExchangePB := path.Builder{}.Append(folder3) badOneDrivePath := makeItemPath( suite.T(), path.OneDriveService, @@ -904,7 +894,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { name string input ItemInfo repoPath path.Path - locPath path.Path + locPath *path.Builder errCheck assert.ErrorAssertionFunc expectedItem ItemInfo }{ @@ -917,7 +907,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: newOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.NoError, expectedItem: ItemInfo{ Exchange: &ExchangeInfo{ @@ -935,7 +925,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: newOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.NoError, expectedItem: ItemInfo{ Exchange: &ExchangeInfo{ @@ -953,7 +943,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: newOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.NoError, expectedItem: ItemInfo{ Exchange: &ExchangeInfo{ @@ -971,7 +961,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: newOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.NoError, expectedItem: ItemInfo{ OneDrive: &OneDriveInfo{ @@ -989,7 +979,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: newOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.NoError, expectedItem: ItemInfo{ SharePoint: &SharePointInfo{ @@ -1007,7 +997,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: badOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.Error, }, { @@ -1019,7 +1009,7 @@ func (suite *DetailsUnitSuite) TestUpdateItem() { }, }, repoPath: badOneDrivePath, - locPath: newExchangePath, + locPath: newExchangePB, errCheck: assert.Error, }, } From bebd83474af5ee1a2b95b614534c970d0578f767 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Apr 2023 04:59:34 +0000 Subject: [PATCH 35/37] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20github.com/aw?= =?UTF-8?q?s/aws-sdk-go=20from=201.44.233=20to=201.44.237=20in=20/src=20(#?= =?UTF-8?q?3041)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.44.233 to 1.44.237.
    Release notes

    Sourced from github.com/aws/aws-sdk-go's releases.

    Release v1.44.237 (2023-04-05)

    Service Client Updates

    • service/apprunner: Updates service API
    • service/config: Updates service API and documentation
    • service/ecs: Updates service documentation
      • This is a document only updated to add information about Amazon Elastic Inference (EI).
    • service/identitystore: Updates service documentation
    • service/ivs-realtime: Updates service API
    • service/network-firewall: Updates service API and documentation
    • service/servicecatalog: Updates service API
      • removed incorrect product type value
    • service/vpc-lattice: Updates service documentation

    Release v1.44.236 (2023-04-04)

    Service Client Updates

    • service/amplifyuibuilder: Updates service API, documentation, and waiters
    • service/autoscaling: Updates service documentation
      • Documentation updates for Amazon EC2 Auto Scaling
    • service/dataexchange: Updates service API
    • service/ec2: Updates service API
      • C6in, M6in, M6idn, R6in and R6idn bare metal instances are powered by 3rd Generation Intel Xeon Scalable processors and offer up to 200 Gbps of network bandwidth.
    • service/elastic-inference: Updates service API and documentation
    • service/runtime.sagemaker: Updates service API and documentation
    • service/sagemaker: Updates service API and documentation
      • Amazon SageMaker Asynchronous Inference now allows customer's to receive failure model responses in S3 and receive success/failure model responses in SNS notifications.
    • service/wafv2: Updates service API and documentation

    Release v1.44.235 (2023-04-03)

    Service Client Updates

    • service/glue: Updates service API and documentation
      • Add support for database-level federation
    • service/lakeformation: Updates service API and documentation
    • service/license-manager: Updates service API and documentation
    • service/mwaa: Updates service API and documentation
    • service/servicecatalog: Updates service API and documentation
      • This release introduces Service Catalog support for Terraform open source. It enables 1. The notify* APIs to Service Catalog. These APIs are used by the terraform engine to notify the result of the provisioning engine execution. 2. Adds a new TERRAFORM_OPEN_SOURCE product type in CreateProduct API.
    • service/wafv2: Updates service API and documentation

    Release v1.44.234 (2023-03-31)

    Service Client Updates

    • service/ec2: Updates service documentation
      • Documentation updates for EC2 On Demand Capacity Reservations

    ... (truncated)

    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/aws/aws-sdk-go&package-manager=go_modules&previous-version=1.44.233&new-version=1.44.237)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --- src/go.mod | 2 +- src/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/go.mod b/src/go.mod index 805c7b910..c7ca4d78c 100644 --- a/src/go.mod +++ b/src/go.mod @@ -8,7 +8,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 github.com/alcionai/clues v0.0.0-20230331202049-339059c90c6e github.com/armon/go-metrics v0.4.1 - github.com/aws/aws-sdk-go v1.44.233 + github.com/aws/aws-sdk-go v1.44.237 github.com/aws/aws-xray-sdk-go v1.8.1 github.com/cenkalti/backoff/v4 v4.2.0 github.com/google/uuid v1.3.0 diff --git a/src/go.sum b/src/go.sum index f90ac498d..cab7a39ae 100644 --- a/src/go.sum +++ b/src/go.sum @@ -66,8 +66,8 @@ github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/aws/aws-sdk-go v1.44.233 h1:KB3p/yL32oG/aF4Ld0Ui9CU0tdezvhX6Xdqpb8vyP3U= -github.com/aws/aws-sdk-go v1.44.233/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.237 h1:gsmVP8eTB6id4tmEsBPcjLlYi1sXtKA047bSn7kJZAI= +github.com/aws/aws-sdk-go v1.44.237/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-xray-sdk-go v1.8.1 h1:O4pXV+hnCskaamGsZnFpzHyAmgPGusBMN6i7nnsy0Fo= github.com/aws/aws-xray-sdk-go v1.8.1/go.mod h1:wMmVYzej3sykAttNBkXQHK/+clAPWTOrPiajEk7Cp3A= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= From baddd9fc83e3192b7ad73ae18e480f3409e2f096 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Thu, 6 Apr 2023 11:02:03 +0530 Subject: [PATCH 36/37] Get OneDrive item with getM365 (#2791) Add support for onedrive in getM365 --- #### 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 - [x] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Test - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/Makefile | 5 +- src/cli/print/print.go | 27 ++- .../{getItem.go => exchange/get_item.go} | 112 ++++------ src/cmd/getM365/main.go | 32 +++ src/cmd/getM365/onedrive/get_item.go | 207 ++++++++++++++++++ src/internal/connector/graph/service.go | 3 +- src/internal/connector/onedrive/api/drive.go | 56 ++++- src/internal/connector/onedrive/collection.go | 5 +- src/internal/connector/onedrive/item.go | 24 +- 9 files changed, 362 insertions(+), 109 deletions(-) rename src/cmd/getM365/{getItem.go => exchange/get_item.go} (50%) create mode 100644 src/cmd/getM365/main.go create mode 100644 src/cmd/getM365/onedrive/get_item.go diff --git a/src/Makefile b/src/Makefile index 6f75be16b..fff36d78c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -79,4 +79,7 @@ load-test: -mutexprofile=mutex.prof \ -trace=trace.out \ -outputdir=test_results \ - ./pkg/repository/loadtest/repository_load_test.go \ No newline at end of file + ./pkg/repository/loadtest/repository_load_test.go + +getM365: + go build -o getM365 cmd/getM365/main.go \ No newline at end of file diff --git a/src/cli/print/print.go b/src/cli/print/print.go index c15643b83..5ab61acca 100644 --- a/src/cli/print/print.go +++ b/src/cli/print/print.go @@ -62,7 +62,7 @@ func StderrWriter(ctx context.Context) io.Writer { } // --------------------------------------------------------------------------------------------------------- -// Helper funcs +// Exported interface // --------------------------------------------------------------------------------------------------------- // Only tells the CLI to only display this error, preventing the usage @@ -110,6 +110,15 @@ func Infof(ctx context.Context, t string, s ...any) { outf(getRootCmd(ctx).ErrOrStderr(), t, s...) } +// PrettyJSON prettifies and prints the value. +func PrettyJSON(ctx context.Context, p minimumPrintabler) { + if p == nil { + Err(ctx, "") + } + + outputJSON(getRootCmd(ctx).ErrOrStderr(), p, outputAsJSONDebug) +} + // out is the testable core of exported print funcs func out(w io.Writer, s ...any) { if len(s) == 0 { @@ -135,8 +144,7 @@ func outf(w io.Writer, t string, s ...any) { // --------------------------------------------------------------------------------------------------------- type Printable interface { - // reduces the struct to a minimized format for easier human consumption - MinimumPrintable() any + minimumPrintabler // should list the property names of the values surfaced in Values() Headers() []string // list of values for tabular or csv formatting @@ -145,6 +153,11 @@ type Printable interface { Values() []string } +type minimumPrintabler interface { + // reduces the struct to a minimized format for easier human consumption + MinimumPrintable() any +} + // Item prints the printable, according to the caller's requested format. func Item(ctx context.Context, p Printable) { printItem(getRootCmd(ctx).OutOrStdout(), p) @@ -216,13 +229,17 @@ func outputTable(w io.Writer, ps []Printable) { // JSON // ------------------------------------------------------------------------------------------ -func outputJSON(w io.Writer, p Printable, debug bool) { +func outputJSON(w io.Writer, p minimumPrintabler, debug bool) { if debug { printJSON(w, p) return } - printJSON(w, p.MinimumPrintable()) + if debug { + printJSON(w, p) + } else { + printJSON(w, p.MinimumPrintable()) + } } func outputJSONArr(w io.Writer, ps []Printable, debug bool) { diff --git a/src/cmd/getM365/getItem.go b/src/cmd/getM365/exchange/get_item.go similarity index 50% rename from src/cmd/getM365/getItem.go rename to src/cmd/getM365/exchange/get_item.go index 829c70b1a..6e7f9022a 100644 --- a/src/cmd/getM365/getItem.go +++ b/src/cmd/getM365/exchange/get_item.go @@ -1,8 +1,8 @@ -// getItem.go is a source file designed to retrieve an m365 object from an +// get_item.go is a source file designed to retrieve an m365 object from an // existing M365 account. Data displayed is representative of the current // serialization abstraction versioning used by Microsoft Graph and stored by Corso. -package main +package exchange import ( "context" @@ -14,76 +14,65 @@ import ( kw "github.com/microsoft/kiota-serialization-json-go" "github.com/spf13/cobra" - . "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/internal/common" - "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/exchange/api" - "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/credentials" "github.com/alcionai/corso/src/pkg/fault" - "github.com/alcionai/corso/src/pkg/logger" "github.com/alcionai/corso/src/pkg/path" ) -var getCmd = &cobra.Command{ - Use: "get", - Short: "Get a M365ID item JSON", - RunE: handleGetCommand, -} - // Required inputs from user for command execution var ( - tenant, user, m365ID, category string + user, tenant, m365ID, category string ) -// main function will produce the JSON String for a given m365 object of a -// user. Displayed Objects can be used as inputs for Mockable data -// Supports: -// - exchange (contacts, email, and events) -// Input: go run ./getItem.go --user -// -// --m365ID --category -func main() { - ctx, _ := logger.SeedLevel(context.Background(), logger.Development) - ctx = SetRootCmd(ctx, getCmd) - - defer logger.Flush(ctx) - - fs := getCmd.PersistentFlags() - fs.StringVar(&user, "user", "", "m365 user id of M365 user") - fs.StringVar(&tenant, "tenant", "", - "m365 Tenant: m365 identifier for the tenant, not required if active in OS Environment") - fs.StringVar(&m365ID, "m365ID", "", "m365 identifier for object to be created") - fs.StringVar(&category, "category", "", "type of M365 data (contacts, email, events or files)") // files not supported - - cobra.CheckErr(getCmd.MarkPersistentFlagRequired("user")) - cobra.CheckErr(getCmd.MarkPersistentFlagRequired("m365ID")) - cobra.CheckErr(getCmd.MarkPersistentFlagRequired("category")) - - if err := getCmd.ExecuteContext(ctx); err != nil { - logger.Flush(ctx) - os.Exit(1) +func AddCommands(parent *cobra.Command) { + exCmd := &cobra.Command{ + Use: "exchange", + Short: "Get an M365ID item JSON", + RunE: handleExchangeCmd, } + + fs := exCmd.PersistentFlags() + fs.StringVar(&m365ID, "id", "", "m365 identifier for object") + fs.StringVar(&category, "category", "", "type of M365 data (contacts, email, events)") + fs.StringVar(&user, "user", "", "m365 user id of M365 user") + fs.StringVar(&tenant, "tenant", "", "m365 identifier for the tenant") + + cobra.CheckErr(exCmd.MarkPersistentFlagRequired("user")) + cobra.CheckErr(exCmd.MarkPersistentFlagRequired("id")) + cobra.CheckErr(exCmd.MarkPersistentFlagRequired("category")) + + parent.AddCommand(exCmd) } -func handleGetCommand(cmd *cobra.Command, args []string) error { - ctx := cmd.Context() - +func handleExchangeCmd(cmd *cobra.Command, args []string) error { if utils.HasNoFlagsAndShownHelp(cmd) { return nil } - _, creds, err := getGC(ctx) - if err != nil { - return err + tid := common.First(tenant, os.Getenv(account.AzureTenantID)) + + ctx := clues.Add( + cmd.Context(), + "item_id", m365ID, + "resource_owner", user, + "tenant", tid) + + creds := account.M365Config{ + M365: credentials.GetM365(), + AzureTenantID: tid, } - err = runDisplayM365JSON(ctx, creds, user, m365ID, fault.New(true)) + err := runDisplayM365JSON(ctx, creds, user, m365ID, fault.New(true)) if err != nil { - return Only(ctx, clues.Wrap(err, "Error displaying item: "+m365ID)) + cmd.SilenceUsage = true + cmd.SilenceErrors = true + + return clues.Wrap(err, "getting item") } return nil @@ -165,30 +154,3 @@ func getItem( return itm.Serialize(ctx, sp, user, itemID) } - -//------------------------------------------------------------------------------- -// Helpers -//------------------------------------------------------------------------------- - -func getGC(ctx context.Context) (*connector.GraphConnector, account.M365Config, error) { - // get account info - m365Cfg := account.M365Config{ - M365: credentials.GetM365(), - AzureTenantID: common.First(tenant, os.Getenv(account.AzureTenantID)), - } - - acct, err := account.NewAccount(account.ProviderM365, m365Cfg) - if err != nil { - return nil, m365Cfg, Only(ctx, clues.Wrap(err, "finding m365 account details")) - } - - // TODO: log/print recoverable errors - errs := fault.New(false) - - gc, err := connector.NewGraphConnector(ctx, graph.HTTPClient(graph.NoTimeout()), acct, connector.Users, errs) - if err != nil { - return nil, m365Cfg, Only(ctx, clues.Wrap(err, "connecting to graph API")) - } - - return gc, m365Cfg, nil -} diff --git a/src/cmd/getM365/main.go b/src/cmd/getM365/main.go new file mode 100644 index 000000000..17aa71d78 --- /dev/null +++ b/src/cmd/getM365/main.go @@ -0,0 +1,32 @@ +package main + +import ( + "context" + "os" + + "github.com/spf13/cobra" + + . "github.com/alcionai/corso/src/cli/print" + "github.com/alcionai/corso/src/cmd/getM365/exchange" + "github.com/alcionai/corso/src/cmd/getM365/onedrive" + "github.com/alcionai/corso/src/pkg/logger" +) + +var rootCmd = &cobra.Command{ + Use: "getM365", +} + +func main() { + ctx, _ := logger.SeedLevel(context.Background(), logger.Development) + + ctx = SetRootCmd(ctx, rootCmd) + defer logger.Flush(ctx) + + exchange.AddCommands(rootCmd) + onedrive.AddCommands(rootCmd) + + if err := rootCmd.Execute(); err != nil { + Err(ctx, err) + os.Exit(1) + } +} diff --git a/src/cmd/getM365/onedrive/get_item.go b/src/cmd/getM365/onedrive/get_item.go new file mode 100644 index 000000000..8794fbb03 --- /dev/null +++ b/src/cmd/getM365/onedrive/get_item.go @@ -0,0 +1,207 @@ +// get_item.go is a source file designed to retrieve an m365 object from an +// existing M365 account. Data displayed is representative of the current +// serialization abstraction versioning used by Microsoft Graph and stored by Corso. + +package onedrive + +import ( + "context" + "encoding/json" + "io" + "net/http" + "os" + + "github.com/alcionai/clues" + "github.com/microsoft/kiota-abstractions-go/serialization" + kjson "github.com/microsoft/kiota-serialization-json-go" + "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/spf13/cobra" + + . "github.com/alcionai/corso/src/cli/print" + "github.com/alcionai/corso/src/cli/utils" + "github.com/alcionai/corso/src/internal/common" + "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/internal/connector/onedrive/api" + "github.com/alcionai/corso/src/pkg/account" + "github.com/alcionai/corso/src/pkg/credentials" +) + +const downloadURLKey = "@microsoft.graph.downloadUrl" + +// Required inputs from user for command execution +var ( + user, tenant, m365ID string +) + +func AddCommands(parent *cobra.Command) { + exCmd := &cobra.Command{ + Use: "onedrive", + Short: "Get an M365ID item", + RunE: handleOneDriveCmd, + } + + fs := exCmd.PersistentFlags() + fs.StringVar(&m365ID, "id", "", "m365 identifier for object") + fs.StringVar(&user, "user", "", "m365 user id of M365 user") + fs.StringVar(&tenant, "tenant", "", "m365 identifier for the tenant") + + cobra.CheckErr(exCmd.MarkPersistentFlagRequired("user")) + cobra.CheckErr(exCmd.MarkPersistentFlagRequired("id")) + + parent.AddCommand(exCmd) +} + +func handleOneDriveCmd(cmd *cobra.Command, args []string) error { + if utils.HasNoFlagsAndShownHelp(cmd) { + return nil + } + + tid := common.First(tenant, os.Getenv(account.AzureTenantID)) + + ctx := clues.Add( + cmd.Context(), + "item_id", m365ID, + "resource_owner", user, + "tenant", tid) + + // get account info + creds := account.M365Config{ + M365: credentials.GetM365(), + AzureTenantID: tid, + } + + // todo: swap to drive api client, when finished. + adpt, err := graph.CreateAdapter(tid, creds.AzureClientID, creds.AzureClientSecret) + if err != nil { + return Only(ctx, clues.Wrap(err, "creating graph adapter")) + } + + err = runDisplayM365JSON(ctx, graph.NewService(adpt), creds, user, m365ID) + if err != nil { + cmd.SilenceUsage = true + cmd.SilenceErrors = true + + return Only(ctx, clues.Wrap(err, "getting item")) + } + + return nil +} + +type itemData struct { + Size int `json:"size"` +} + +type itemPrintable struct { + Info json.RawMessage `json:"info"` + Permissions json.RawMessage `json:"permissions"` + Data itemData `json:"data"` +} + +func (i itemPrintable) MinimumPrintable() any { + return i +} + +func runDisplayM365JSON( + ctx context.Context, + srv graph.Servicer, + creds account.M365Config, + user, itemID string, +) error { + drive, err := api.GetDriveByID(ctx, srv, user) + if err != nil { + return err + } + + driveID := ptr.Val(drive.GetId()) + + it := itemPrintable{} + + item, err := api.GetDriveItem(ctx, srv, driveID, itemID) + if err != nil { + return err + } + + if item != nil { + content, err := getDriveItemContent(item) + if err != nil { + return err + } + + // We could get size from item.GetSize(), but the + // getDriveItemContent call is to ensure that we are able to + // download the file. + it.Data.Size = len(content) + } + + sInfo, err := serializeObject(item) + if err != nil { + return err + } + + err = json.Unmarshal([]byte(sInfo), &it.Info) + if err != nil { + return err + } + + perms, err := api.GetItemPermission(ctx, srv, driveID, itemID) + if err != nil { + return err + } + + sPerms, err := serializeObject(perms) + if err != nil { + return err + } + + err = json.Unmarshal([]byte(sPerms), &it.Permissions) + if err != nil { + return err + } + + PrettyJSON(ctx, it) + + return nil +} + +func serializeObject(data serialization.Parsable) (string, error) { + sw := kjson.NewJsonSerializationWriter() + + err := sw.WriteObjectValue("", data) + if err != nil { + return "", clues.Wrap(err, "writing serializing info") + } + + content, err := sw.GetSerializedContent() + if err != nil { + return "", clues.Wrap(err, "getting serializing info") + } + + return string(content), err +} + +func getDriveItemContent(item models.DriveItemable) ([]byte, error) { + url, ok := item.GetAdditionalData()[downloadURLKey].(*string) + if !ok { + return nil, clues.New("get download url") + } + + req, err := http.NewRequest(http.MethodGet, *url, nil) + if err != nil { + return nil, clues.New("create download request").With("error", err) + } + + hc := graph.HTTPClient(graph.NoTimeout()) + + resp, err := hc.Do(req) + if err != nil { + return nil, clues.New("download item").With("error", err) + } + + content, err := io.ReadAll(resp.Body) + if err != nil { + return nil, clues.New("read downloaded item").With("error", err) + } + + return content, nil +} diff --git a/src/internal/connector/graph/service.go b/src/internal/connector/graph/service.go index 4bf449044..ab2d890fc 100644 --- a/src/internal/connector/graph/service.go +++ b/src/internal/connector/graph/service.go @@ -29,6 +29,7 @@ import ( const ( logGraphRequestsEnvKey = "LOG_GRAPH_REQUESTS" log2xxGraphRequestsEnvKey = "LOG_2XX_GRAPH_REQUESTS" + log2xxGraphResponseEnvKey = "LOG_2XX_GRAPH_RESPONSES" retryAttemptHeader = "Retry-Attempt" retryAfterHeader = "Retry-After" defaultMaxRetries = 3 @@ -368,7 +369,7 @@ func (handler *LoggingMiddleware) Intercept( // If api logging is toggled, log a body-less dump of the request/resp. if (resp.StatusCode / 100) == 2 { if logger.DebugAPI || os.Getenv(log2xxGraphRequestsEnvKey) != "" { - log.Debugw("2xx graph api resp", "response", getRespDump(ctx, resp, false)) + log.Debugw("2xx graph api resp", "response", getRespDump(ctx, resp, os.Getenv(log2xxGraphResponseEnvKey) != "")) } return resp, err diff --git a/src/internal/connector/onedrive/api/drive.go b/src/internal/connector/onedrive/api/drive.go index 9133d6c03..f72cdf10f 100644 --- a/src/internal/connector/onedrive/api/drive.go +++ b/src/internal/connector/onedrive/api/drive.go @@ -203,10 +203,6 @@ func (p *siteDrivePager) ValuesIn(l api.PageLinker) ([]models.Driveable, error) return getValues[models.Driveable](l) } -// --------------------------------------------------------------------------- -// Drive Paging -// --------------------------------------------------------------------------- - // DrivePager pages through different types of drive owners type DrivePager interface { GetPage(context.Context) (api.PageLinker, error) @@ -275,3 +271,55 @@ func GetAllDrives( return ds, nil } + +// generic drive item getter +func GetDriveItem( + ctx context.Context, + srv graph.Servicer, + driveID, itemID string, +) (models.DriveItemable, error) { + di, err := srv.Client(). + DrivesById(driveID). + ItemsById(itemID). + Get(ctx, nil) + if err != nil { + return nil, graph.Wrap(ctx, err, "getting item") + } + + return di, nil +} + +func GetItemPermission( + ctx context.Context, + service graph.Servicer, + driveID, itemID string, +) (models.PermissionCollectionResponseable, error) { + perm, err := service. + Client(). + DrivesById(driveID). + ItemsById(itemID). + Permissions(). + Get(ctx, nil) + if err != nil { + return nil, graph.Wrap(ctx, err, "getting item metadata").With("item_id", itemID) + } + + return perm, nil +} + +func GetDriveByID( + ctx context.Context, + srv graph.Servicer, + userID string, +) (models.Driveable, error) { + //revive:enable:context-as-argument + d, err := srv.Client(). + UsersById(userID). + Drive(). + Get(ctx, nil) + if err != nil { + return nil, graph.Wrap(ctx, err, "getting drive") + } + + return d, nil +} diff --git a/src/internal/connector/onedrive/collection.go b/src/internal/connector/onedrive/collection.go index 997c7c94b..6f45eb9bf 100644 --- a/src/internal/connector/onedrive/collection.go +++ b/src/internal/connector/onedrive/collection.go @@ -16,6 +16,7 @@ import ( "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/internal/connector/onedrive/api" "github.com/alcionai/corso/src/internal/connector/support" "github.com/alcionai/corso/src/internal/data" "github.com/alcionai/corso/src/internal/observe" @@ -166,11 +167,11 @@ func NewCollection( // Allows tests to set a mock populator switch source { case SharePointSource: - c.itemGetter = getDriveItem + c.itemGetter = api.GetDriveItem c.itemReader = sharePointItemReader c.itemMetaReader = sharePointItemMetaReader default: - c.itemGetter = getDriveItem + c.itemGetter = api.GetDriveItem c.itemReader = oneDriveItemReader c.itemMetaReader = oneDriveItemMetaReader } diff --git a/src/internal/connector/onedrive/item.go b/src/internal/connector/onedrive/item.go index 6f9a2e0ab..209cdce15 100644 --- a/src/internal/connector/onedrive/item.go +++ b/src/internal/connector/onedrive/item.go @@ -14,6 +14,7 @@ import ( "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/internal/connector/onedrive/api" "github.com/alcionai/corso/src/internal/connector/uploadsession" "github.com/alcionai/corso/src/internal/version" "github.com/alcionai/corso/src/pkg/backup/details" @@ -26,20 +27,6 @@ const ( downloadURLKey = "@microsoft.graph.downloadUrl" ) -// generic drive item getter -func getDriveItem( - ctx context.Context, - srv graph.Servicer, - driveID, itemID string, -) (models.DriveItemable, error) { - di, err := srv.Client().DrivesById(driveID).ItemsById(itemID).Get(ctx, nil) - if err != nil { - return nil, graph.Wrap(ctx, err, "getting item") - } - - return di, nil -} - // sharePointItemReader will return a io.ReadCloser for the specified item // It crafts this by querying M365 for a download URL for the item // and using a http client to initialize a reader @@ -229,14 +216,9 @@ func driveItemPermissionInfo( driveID string, itemID string, ) ([]UserPermission, error) { - perm, err := service. - Client(). - DrivesById(driveID). - ItemsById(itemID). - Permissions(). - Get(ctx, nil) + perm, err := api.GetItemPermission(ctx, service, driveID, itemID) if err != nil { - return nil, graph.Wrap(ctx, err, "fetching item permissions").With("item_id", itemID) + return nil, err } uperms := filterUserPermissions(ctx, perm.GetValue()) From 3e3c16426f7fc12f42034b80ec92642c95224534 Mon Sep 17 00:00:00 2001 From: Georgi Matev Date: Wed, 5 Apr 2023 23:20:44 -0700 Subject: [PATCH 37/37] Graph PowerShell troubleshooter (#3026) Introduces a handy tool that can be used in troubleshooting to have Corso users issue specific Graph API calls using the Graph Powershell module --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [ ] :no_entry: No #### Type of change - [x] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [x] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/cmd/graph_pwsh/Auth-Graph.ps1 | 39 +++++++++++ src/cmd/graph_pwsh/Dockerfile | 9 +++ src/cmd/graph_pwsh/README.md | 112 ++++++++++++++++++++++++++++++ src/cmd/graph_pwsh/env_names | 4 ++ 4 files changed, 164 insertions(+) create mode 100644 src/cmd/graph_pwsh/Auth-Graph.ps1 create mode 100644 src/cmd/graph_pwsh/Dockerfile create mode 100644 src/cmd/graph_pwsh/README.md create mode 100644 src/cmd/graph_pwsh/env_names diff --git a/src/cmd/graph_pwsh/Auth-Graph.ps1 b/src/cmd/graph_pwsh/Auth-Graph.ps1 new file mode 100644 index 000000000..e22d2dbe0 --- /dev/null +++ b/src/cmd/graph_pwsh/Auth-Graph.ps1 @@ -0,0 +1,39 @@ +$tenantId = $ENV:AZURE_TENANT_ID +$clientId = $ENV:AZURE_CLIENT_ID +$clientSecret = $ENV:AZURE_CLIENT_SECRET +$useBeta = ($ENV:MSGRAPH_USE_BETA -eq 1) -or ($ENV:MSGRAPH_USE_BETA -eq "1") -or ($ENV:MSGRAPH_USE_BETA -eq "true") + +# This version of Graph Powershell does not support app secret auth yet so roll our own +$body = @{ + Grant_Type = "client_credentials" + Scope = "https://graph.microsoft.com/.default" + Client_Id = $clientId + Client_Secret = $clientSecret +} + +$ConectionRequest = @{ + Uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" + Method = "POST" + Body = $body +} + +$connection = Invoke-RestMethod @ConectionRequest + +Write-Host "Authenticating with tenantId: $tenantId ..." +try { + Connect-MgGraph -AccessToken $connection.access_token + Write-Host "Successfully authenticated with tenantId: $tenantId ..." +} +catch { + Write-Host "Authentication failed..." + Write-Output $_ +} + +if ($useBeta) { + Write-Host "Switching to Beta Graph API..." + Select-MgProfile -Name "beta" +} + + + + diff --git a/src/cmd/graph_pwsh/Dockerfile b/src/cmd/graph_pwsh/Dockerfile new file mode 100644 index 000000000..24eabd647 --- /dev/null +++ b/src/cmd/graph_pwsh/Dockerfile @@ -0,0 +1,9 @@ +from m365pnp/powershell:2.1.1-alpine-3.14 + +RUN Install-Module PowerShellGet -Force +RUN Install-Module Microsoft.Graph -Force -RequiredVersion 1.25.0 -Scope AllUsers + +COPY ./Auth-Graph.ps1 /tmp/Auth-Graph.ps1 +RUN Move-Item -Path /tmp/Auth-Graph.ps1 -Destination $PROFILE.AllUsersAllHosts + +WORKDIR /usr/pwsh \ No newline at end of file diff --git a/src/cmd/graph_pwsh/README.md b/src/cmd/graph_pwsh/README.md new file mode 100644 index 000000000..276353d35 --- /dev/null +++ b/src/cmd/graph_pwsh/README.md @@ -0,0 +1,112 @@ +# Graph SDK Powershell Troubleshooter + +In certain cases, troubleshooting would be significantly simplified if a Corso +user had a simple mechanism to execute targeted MS Graph API commands against +their environment. + +One convenient mechanism to accomplish this without going down to the level of +wrapping individual Graph API calls is to use the +[Microsoft Graph PowerShell](https://learn.microsoft.com/en-us/powershell/microsoftgraph/overview?view=graph-powershell-1.0). +It provides a convenient wrapper and great coverage of the API surface. + +## Build container + +Before using the tool you want to build the container that packages it. + +```sh +docker build -t corso/graph_pwsh:latest . +``` + +## Prerequisites + +### Docker + +You need to have Docker installed on your system. + +### Azure AD app credentials + +The tool uses your existing Corso app to make Graph calls and for authentication +you want `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, and `AZURE_CLIENT_SECRET` to be +set as environment variables. You can read more about this [here](https://corsobackup.io/docs/setup/m365-access/). +You will then pass these into the container run so that authentication can be completed. + +## Using the tool + +### Interactive use + +This is suitable if you would like to issue a number of MS Graph API commands from an +interactive shell in the container. + +```sh +docker run --rm -it -v $(pwd):/usr/pwsh -e AZURE_TENANT_ID -e AZURE_CLIENT_ID -e AZURE_CLIENT_SECRET corso/graph_pwsh pwsh +``` + +Alternatively you can use an environment variable file `env_names` that has the names of the required environment variables + +```sh +docker run --rm -it -v $(pwd):/usr/pwsh --env-file env_names corso/graph_pwsh pwsh +``` + +Before you run any command you want to authenticate with Graph using a convenient script +that will create a connection using the default permissions granted to the app. + +```powershell +PS> ./Auth-Graph.ps1 +``` + +If you know what you are doing feel free to use `Connect-MgGraph` directly. + +### Specific command use + +Suitable when you want to run just a single command. Essentially running the `Auth-Graph.ps1` +before the actual command you want to run. + +```sh +docker run --rm -it -v $(pwd):/usr/pwsh --env-file env_names corso/graph_pwsh \ + pwsh -c "" +``` + +Here is a complete example to get all users + +```sh +# This is the equivalent of GET https://graph.microsoft.com/v1.0/users +docker run --rm -it -v $(pwd):/usr/pwsh --env-file env_names corso/graph_pwsh \ + pwsh -c "Get-MgUser -All" +``` + +Another example to retrieve an email message for a given user by ID. + +```sh +# This is the equivalent of GET https://graph.microsoft.com/v1.0//messages/ +docker run --rm -it -v $(pwd):/usr/pwsh --env-file env_names corso/graph_pwsh \ + pwsh -c "Get-MgUserMessage -UserId -MessageID " +``` + +## Debug output + +To see the requests and responses made by the specific Graph PowerShell commands, add `-Debug` to you command, +similar to the example below. + +```sh +# This is the equivalent of GET https://graph.microsoft.com/v1.0/users +docker run --rm -it -v $(pwd):/usr/pwsh --env-file env_names corso/graph_pwsh \ + pwsh -c "Get-MgUser -All -Debug" +``` + +## Using Beta API calls + +In order to use the Beta Graph API, make sure you have done `export MSGRAPH_USE_BETA=1` +before running the container and pass the environment variable in. + +Alternatively you can do the following: + +```sh +# This is the equivalent of GET https://graph.microsoft.com/v1.0/users +docker run --rm -it -v $(pwd):/usr/pwsh --env-file env_names corso/graph_pwsh \ + pwsh -c "Select-MgProfile -Name "beta" && Get-MgUser -All" +``` + +## Graph PowerShell reference + +To learn about specific commands, see the +[Graph PowerShell Reference](https://learn.microsoft.com/en-us/powershell/microsoftgraph/get-started?view=graph-powershell-1.0) diff --git a/src/cmd/graph_pwsh/env_names b/src/cmd/graph_pwsh/env_names new file mode 100644 index 000000000..4941e765d --- /dev/null +++ b/src/cmd/graph_pwsh/env_names @@ -0,0 +1,4 @@ +AZURE_TENANT_ID +AZURE_CLIENT_ID +AZURE_CLIENT_SECRET +MSGRAPH_USE_BETA